The problem is this: with no server listening on the port the client will process connect and respond with a success. Futhermore, I can go on to send() data and it will come back saying that it sent the requested number of bytes.
When a server is listening it works fine.
Note: POSTBUFF; is just a #define that prints szBuffer to an edit box.
Code:
if ( iError = WSAStartup (MAKEWORD (2,0), &WSAData) )
{
wsprintf(szBuffer, TEXT("WSAStartup() error #%i.\r\n"), WSAGetLastError() );
POSTBUFF;
return 0;
}
wsprintf(szBuffer, TEXT("Started up %hs\r\n"), WSAData.szDescription);
POSTBUFF;
if ( (lpHostEntry = gethostbyname("Michael")) == NULL)
{
wsprintf(szBuffer, TEXT("gethost error %i"), WSAGetLastError() );
POSTBUFF;
}
if ( (sock = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP) ) == INVALID_SOCKET)
{
wsprintf(szBuffer, TEXT("sock error #%i\r\n"), WSAGetLastError() );
POSTBUFF;
}
if (SOCKET_ERROR == WSAAsyncSelect (sock, hwnd, WM_SOCKET_NOTIFY, FD_CONNECT | FD_READ | FD_ACCEPT | FD_WRITE | FD_CLOSE | FD_OOB) )
{
wsprintf(szBuffer, TEXT("WSAAsyncSelect sock error #%i.\r\n"), WSAGetLastError() );
POSTBUFF;
closesocket (sock);
}
sa.sin_family = AF_INET;
sa.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);
sa.sin_port = htons(9143);
temp = connect (sock, (LPSOCKADDR)&sa, sizeof(struct sockaddr) );
if ( temp == SOCKET_ERROR && (iError = WSAGetLastError()) != WSAEWOULDBLOCK)
{
wsprintf(szBuffer, TEXT("\r\nConnect() error. %i"), iError );
POSTBUFF;
closesocket (sock);
return 0;
}
else
PostText (hMessages, "\r\nConnect() successful");