直到我谷歌搜索并退出msdn为止,这表明Microsoft 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;
}

最佳答案

据我所知,Windows中没有这样的电话。 (可惜,因为它工作得很好!)

但是,我发现以下链接非常有用,可以帮助您解决问题。除了“还有什么还可以做?”中提到的SIOCOUTQ部分,这些概念适用于任何操作系统。 部分。

The ultimate so_linger page or why is my tcp not reliable

09-06 03:36