Till date my googling and checking out of msdn suggests Microsoft Windows does not offer any equivalent of TIOCOUTQ / SIOCOUTQ to find the amount of unsent data in the socket send buffer. It will be so useful if some good hack discovered something otherwise, and could post it here. It will allow my following code to become cross-platform
int net_get_unsent (const int sockfd, unsigned long &sock_bytes_unsent )
{
/* Queries how much data sent on sockfd,
* may not have yet been recieved by the reciever
*
* returns more than 1 if there's unsent data,
* and fills in the amount of unsent data in sock_bytes_unsent
*
* returns 0 if all the data has been sent
*
* returns < 0 if there was a socket I/O error
* */
int err = 0;
int wsaerr = 0;
if (sockfd <= 0)
return -1;
#ifdef WINDOWS
err = ioctlsocket(sockfd, SIOCOUTQ , &sock_bytes_unsent);
#else
err = ioctl(sockfd, TIOCOUTQ, &sock_bytes_unsent);
#endif
if (err < 0) {
#ifdef WINDOWS
wsaerr = WSAGetLastError();
#else
wsaerr = errno;
#endif
printf("failed to get unsent data error:%d", wsaerr );
sock_bytes_unsent = 0;
return -1 * wsaerr;
} else if (sock_bytes_unsent > 0 ) {
printf( "unsent data: %lu bytes", sock_bytes_unsent );
return 1;
}
return err;
}