#include #include #define DATASIZE 1 int main(int argc, char *argv[]) { WSADATA wsaData; SOCKET Listen, Send, Receive; struct sockaddr_in ListenAddr, TalkAddr; int AddrLen; char Data[DATASIZE]; unsigned Count; DWORD Time1, Time2; int BytesToReceive, BytesReceived; if (0 != WSAStartup(MAKEWORD(1, 1), &wsaData)) { fprintf(stderr, "WSAStartup failed\n"); exit(1); } Listen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (INVALID_SOCKET == Listen) { fprintf(stderr, "socket() for Listen failed\n"); exit(1); } ListenAddr.sin_family = AF_INET; ListenAddr.sin_port = 0; ListenAddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); if (0 != bind(Listen, (struct sockaddr *) &ListenAddr, sizeof(struct sockaddr_in))) { fprintf(stderr, "bind() for Listen failed\n"); closesocket(Listen); exit(1); } AddrLen = sizeof(struct sockaddr_in); if (0 != getsockname(Listen, (struct sockaddr *) &ListenAddr, &AddrLen)) { fprintf(stderr, "getsockname() failed\n"); closesocket(Listen); exit(1); } if (0 != listen(Listen, 1)) { fprintf(stderr, "listen() failed\n"); closesocket(Listen); exit(1); } Send = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (INVALID_SOCKET == Send) { fprintf(stderr, "socket() for Send failed\n"); closesocket(Listen); exit(1); } TalkAddr.sin_family = AF_INET; TalkAddr.sin_port = 0; TalkAddr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); if (0 != bind(Send, (struct sockaddr *) &TalkAddr, sizeof(struct sockaddr_in))) { fprintf(stderr, "bind() for Send failed\n"); closesocket(Send); closesocket(Listen); exit(1); } if (0 != connect(Send, (struct sockaddr *) &ListenAddr, sizeof(struct sockaddr_in))) { fprintf(stderr, "connect() failed\n"); closesocket(Send); closesocket(Listen); exit(1); } Receive = accept(Listen, NULL, NULL); if (INVALID_SOCKET == Receive) { fprintf(stderr, "accept() failed\n"); closesocket(Send); closesocket(Listen); exit(1); } closesocket(Listen); for (Count = 0; Count < 5; Count++) { memset(Data, Count & 0xff, DATASIZE); Time1 = GetTickCount(); if (DATASIZE != send(Send, Data, DATASIZE, 0)) { fprintf(stderr, "send() failed\n"); closesocket(Receive); closesocket(Send); exit(1); } Time2 = GetTickCount(); printf("send took %u ms\n", (unsigned) (Time2 - Time1)); BytesToReceive = DATASIZE; while (0 != BytesToReceive) { BytesReceived = recv(Receive, Data + DATASIZE - BytesToReceive, BytesToReceive, 0); if (BytesReceived <= 0) { fprintf(stderr, "recv() failed\n"); closesocket(Receive); closesocket(Send); exit(1); } BytesToReceive -= BytesReceived; } printf("recv took %u ms\n\n", (unsigned) (GetTickCount() - Time2)); } closesocket(Receive); closesocket(Send); return 0; }