git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10 a95241bf-73f2-0310-859d-f6bbb57e9c96
91 lines
1.8 KiB
C
91 lines
1.8 KiB
C
#include <stdio.h>
|
|
#include <kernel/OS.h>
|
|
#include <string.h>
|
|
#include <sys/time.h>
|
|
#include <errno.h>
|
|
|
|
#include "sys/socket.h"
|
|
#include "netinet/in.h"
|
|
#include "arpa/inet.h"
|
|
#include "sys/select.h"
|
|
|
|
#include "ufunc.h"
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
int s, f;
|
|
int rv;
|
|
struct fd_set fdr, fdw, fde;
|
|
struct timeval tv;
|
|
int32 rtc;
|
|
char path[PATH_MAX];
|
|
|
|
test_banner("Select Test #2");
|
|
|
|
s = socket(AF_INET, SOCK_DGRAM, 0);
|
|
if (s < 0)
|
|
err(s, "Socket creation failed");
|
|
|
|
getcwd(path, PATH_MAX);
|
|
sprintf(path, "%s/select_test2.c", path);
|
|
f = open(path, O_RDWR);
|
|
|
|
if (f > 0 && s > 0) {
|
|
printf("\nsocket and fd created.\n");
|
|
} else {
|
|
err(-1, "Failed to create socket or fd\n");
|
|
}
|
|
|
|
FD_ZERO(&fdr);
|
|
FD_SET(s, &fdr);
|
|
FD_ZERO(&fdw);
|
|
FD_SET(s, &fdw);
|
|
FD_ZERO(&fde);
|
|
FD_SET(s, &fde);
|
|
|
|
tv.tv_sec = 5;
|
|
tv.tv_usec = 0;
|
|
printf("\nTest1\n=====\n\n");
|
|
printf("Trying with timeval (5 secs)...\n");
|
|
rtc = real_time_clock();
|
|
rv = select(s + 1, &fdr, NULL, &fde, &tv);
|
|
rtc = real_time_clock() - rtc;
|
|
printf("select gave %d (expecting 0) in %ld seconds\n", rv, rtc);
|
|
|
|
FD_ZERO(&fdr);
|
|
FD_SET(s, &fdr);
|
|
FD_SET(f, &fdr);
|
|
FD_ZERO(&fdw);
|
|
FD_SET(s, &fdw);
|
|
FD_ZERO(&fde);
|
|
FD_SET(s, &fde);
|
|
|
|
printf("\nTest2\n=====\n\n");
|
|
printf("Trying without timeval and both sockets and files...\n");
|
|
rv = select(f +1, &fdr, NULL, NULL, NULL);
|
|
printf("select gave %d (expecting 2)\n", rv);
|
|
|
|
if (rv > 0) {
|
|
if (FD_ISSET(s, &fdr))
|
|
printf("Data to read\n");
|
|
if (FD_ISSET(s, &fdw))
|
|
printf("OK to write\n");
|
|
if (FD_ISSET(s, &fde))
|
|
printf("Exception!\n");
|
|
if (FD_ISSET(f, &fdr))
|
|
printf("File is readable!\n");
|
|
} else if (rv == 0) {
|
|
printf("Timed out??? huh?!\n");
|
|
} else {
|
|
printf("errno = %d [%s]\n", errno, strerror(errno));
|
|
}
|
|
|
|
closesocket(s);
|
|
close(f);
|
|
|
|
printf("Test complete.\n");
|
|
|
|
return (0);
|
|
}
|
|
|