#include "test.h"
#if INCLUDE_SELECT_TEST
enum
{
READ_FDS,
WRITE_FDS,
EXCEPT_FDS
};
#define UDP_PORT 51232
#define THIS_FILE "select_test"
int setcount[])
{
int i, n;
for (i=0; i<3; ++i) {
setcount[i] = 0;
}
&timeout);
if (n < 0)
return n;
if (n == 0)
return 0;
for (i=0; i<3; ++i) {
setcount[i]++;
setcount[i]++;
}
return n;
}
int select_test()
{
int status;
int setcount[3];
const char data[] = "hello";
const int datalen = 5;
char buf[10];
PJ_LOG(3, (THIS_FILE,
"...Testing simple UDP select()"));
app_perror("...error: unable to create socket", rc);
status=-10; goto on_return;
}
app_perror("...error: unable to create socket", rc);
status=-20; goto on_return;
}
status=-30; goto on_return;
}
sent = datalen;
rc =
pj_sock_sendto(udp1, data, &sent, 0, &udp_addr,
sizeof(udp_addr));
app_perror("...error: sendto() error", rc);
status=-40; goto on_return;
}
status = do_select(udp1, udp2, setcount);
if (status < 0) {
char errbuf[128];
PJ_LOG(1,(THIS_FILE,
"...error: %s", errbuf));
status=-50; goto on_return;
}
if (status == 0) {
status=-60; goto on_return;
}
if (setcount[READ_FDS] != 1) {
status=-70; goto on_return;
}
if (setcount[WRITE_FDS] != 0) {
if (setcount[WRITE_FDS] == 2) {
PJ_LOG(3,(THIS_FILE,
"...info: system reports writable sockets"));
} else {
status=-80; goto on_return;
}
} else {
"...info: system doesn't report writable sockets"));
}
if (setcount[EXCEPT_FDS] != 0) {
status=-90; goto on_return;
}
received = sizeof(buf);
status=-100; goto on_return;
}
status = 0;
setcount[0] = setcount[1] = setcount[2] = 0;
status = do_select(udp1, udp2, setcount);
if (status != 0 && status != setcount[WRITE_FDS]) {
PJ_LOG(3,(THIS_FILE,
"...error: expecting timeout but got %d sks set",
status));
PJ_LOG(3,(THIS_FILE,
" rdset: %d, wrset: %d, exset: %d",
setcount[0], setcount[1], setcount[2]));
status = -110; goto on_return;
}
if (setcount[READ_FDS] != 0) {
PJ_LOG(3,(THIS_FILE,
"...error: readable socket not expected"));
status = -120; goto on_return;
}
status = 0;
on_return:
return status;
}
#else
int dummy_select_test;
#endif