TCP is a connection-oriented transport protocol which means that end points have to establish a connection prior to sending any (payload) data. Server opens one socket only for listening for incoming connection requests that come from clients. When placing a socket into a listening state, a maximum number of pending incoming connections is set. Those connections are waiting to be accepted and when backlog gets full no new connections are accepted.
Operations on listening socket are:
Listening socket never gets into connected state and shutdown() called on it yields socket error 10057 - WSAENOTCONN (Socket is not connected).
Here is the timeline of one simple dialogue between the client and the server:
Operations on listening socket are:
Listening socket never gets into connected state and shutdown() called on it yields socket error 10057 - WSAENOTCONN (Socket is not connected).
Here is the timeline of one simple dialogue between the client and the server:
Client | Server |
---|---|
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) | sockListen= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) |
- | sockaddr_in sSockAddr; sSockAddr.sin_family = AF_INET; sSockAddr.sin_addr.s_addr = inet_addr("192.168.0.24"); sSockAddr.sin_port = htons(43501); bind(sockListen, (SOCKADDR*)&sSockAddr, sizeof(sSockAddr)); |
- | listen(sockListen, MAXPENDING) |
struct sockaddr_in sockAddrRemoteNode; memset(&sockAddrRemoteNode, 0, sizeof(sockAddrRemoteNode)); sockAddrRemoteNode.sin_family = AF_INET; sockAddrRemoteNode.sin_addr.s_addr = inet_addr("192.168.0.24"); sockAddrRemoteNode.sin_port = htons(43501); connect(sock, (struct sockaddr*) &sockAddrRemoteNode, sizeof(sockAddrRemoteNode)); | struct sockaddr sockAddrClt; int nSockAddrLen = sizeof(sockAddrClt); sockClient = accept(sockListen, (struct sockaddr*) &sockAddrClt, &nSockAddrLen); |
send(sock, buffSend, SEND_BUFF_SIZE, 0) | int recvPacketLen = recv(sockClient, buffRecv, RECV_BUFF_SIZE, 0) |
shutdown(sock, SD_BOTH) | shutdown(sockClient, SD_BOTH) |
closesocket(sock) | closesocket(sockClient) |
- | closesocket(sockListen) |
No comments:
Post a Comment