version 1.4, 2005/02/20 22:33:10
|
version 1.5, 2005/02/21 19:30:18
|
|
|
#define NUM_CLIENTS 5 | #define NUM_CLIENTS 5 |
| |
struct TestParams { | struct TestParams { |
int sock; |
int serverSock; |
int type; |
int serverType; |
int serverPort; | int serverPort; |
int clientPort[NUM_CLIENTS]; | int clientPort[NUM_CLIENTS]; |
}; | }; |
|
|
static void test_ClientServerBlocking_1(void); | static void test_ClientServerBlocking_1(void); |
static void test_Startup(void); | static void test_Startup(void); |
| |
void BlockingClient() |
// StartNetworkApp creates socket sock of type type and returns assigned port number in addr. |
|
void StartNetworkApp(int type, SOCKET *sock, SOCKADDR_IN *addr) |
{ | { |
SOCKET sock; |
SOCKADDR_IN tmpAddr; |
SOCKADDR_IN client; |
int tmpAddrSize; |
| |
sock = socket(AF_INET, SOCK_DGRAM, 0); |
*sock = socket(AF_INET, type, 0); |
if (sock == INVALID_SOCKET) { |
if (*sock == INVALID_SOCKET) { |
ok( 0 , "Error in socket()"); | ok( 0 , "Error in socket()"); |
WSACleanup(); | WSACleanup(); |
exit(0); | exit(0); |
} | } |
trace("socket() ok\n"); | trace("socket() ok\n"); |
| |
client.sin_family = AF_INET; |
addr->sin_family = AF_INET; |
client.sin_addr.s_addr = INADDR_ANY; |
addr->sin_addr.s_addr = INADDR_ANY; |
client.sin_port = htons(0); |
addr->sin_port = htons(0); |
|
|
bind(sock, (const SOCKADDR *) &client, sizeof(client)); |
|
| |
|
if( bind(*sock, (const SOCKADDR *) addr, sizeof(*addr)) ) { |
|
ok( 0 , "Error binding client to socket"); |
|
WSACleanup(); |
|
exit(0); |
|
} |
| |
|
// get port number |
|
tmpAddrSize = sizeof(tmpAddr); |
|
getsockname(*sock, (SOCKADDR *) &tmpAddr, &tmpAddrSize); |
|
addr->sin_port = tmpAddr.sin_port; |
|
} |
| |
//while(1) |
void BlockingClient() |
{ | { |
printf("Thread 1\n"); |
SOCKET sock; |
} |
SOCKADDR_IN client; |
|
StartNetworkApp(SOCK_STREAM, &sock, &client); |
|
|
|
// network code here |
|
|
|
trace("blocking client done\n"); |
} | } |
| |
void BlockingServer() | void BlockingServer() |
{ | { |
trace("blocking server\n"); |
SOCKET sock; |
|
SOCKADDR_IN server; |
|
StartNetworkApp(SOCK_STREAM, &sock, &server); |
|
|
|
// network code here |
|
|
|
trace("blocking server done\n"); |
} | } |
| |
static void test_ClientServerBlocking_1(void) | static void test_ClientServerBlocking_1(void) |
|
|
DWORD ThreadId1, ThreadId2; | DWORD ThreadId1, ThreadId2; |
Thread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) &BlockingClient, NULL, 0, &ThreadId1); | Thread1 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) &BlockingClient, NULL, 0, &ThreadId1); |
Thread2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) &BlockingServer, NULL, 0, &ThreadId2); | Thread2 = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) &BlockingServer, NULL, 0, &ThreadId2); |
//trace("In test_ClientServerBlocking_1\n"); |
trace("test_ClientServerBlocking_1 done\n"); |
} | } |
| |
static void test_Startup(void) | static void test_Startup(void) |