截止日期我的搜索結果和檢出msdn建議Microsoft Windows不提供任何TIOCOUTQ/SIOCOUTQ的等價物來查找套接字發送緩衝區中未發送數據的數量。 如果一些好的黑客發現了別的東西,它會非常有用,並且可以在這裏發佈。 它將使我下面的代碼,成爲跨平臺相當於windows中的TIOCOUTQ/SIOCOUTQ
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;
}
相關:http://stackoverflow.com/q/12858259 – icktoofay