Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+;中使用connect()时设置超时+; 我在Linux上使用C++中的套接字,使用Connect()连接到服务器,但它似乎没有超时值。给它几秒钟的超时时间最简单/最好的方法是什么。我将发布我拥有的代码,包括对connect()的阻塞调用: 使用名称空间std; int main(int argc,char*argv[]) { //解释命令行参数 字符串uri_string=“”; 如果(argc!=2) { cerr_C++_Sockets_Timeout - Fatal编程技术网

在C+;中使用connect()时设置超时+; 我在Linux上使用C++中的套接字,使用Connect()连接到服务器,但它似乎没有超时值。给它几秒钟的超时时间最简单/最好的方法是什么。我将发布我拥有的代码,包括对connect()的阻塞调用: 使用名称空间std; int main(int argc,char*argv[]) { //解释命令行参数 字符串uri_string=“”; 如果(argc!=2) { cerr

在C+;中使用connect()时设置超时+; 我在Linux上使用C++中的套接字,使用Connect()连接到服务器,但它似乎没有超时值。给它几秒钟的超时时间最简单/最好的方法是什么。我将发布我拥有的代码,包括对connect()的阻塞调用: 使用名称空间std; int main(int argc,char*argv[]) { //解释命令行参数 字符串uri_string=“”; 如果(argc!=2) { cerr,c++,sockets,timeout,C++,Sockets,Timeout,看一看,其中有关于如何在Linux中为套接字连接设置超时的详细信息和示例代码。基本思想是使用非阻塞套接字,然后等待连接。将套接字设置为非阻塞套接字,然后使用select()或poll()以及超时值检查可写性。如果select()返回超时您没有及时连接,您可以关闭套接字并处理连接故障。如果它返回并完成,则一切正常,您可以继续操作。为您的套接字设置非阻塞模式,并使用选择检查是否建立了连接。示例是否是执行非阻塞的另一种方法-没有select()痛苦的阻塞就是检查GetLastError()中的eWol

看一看,其中有关于如何在Linux中为套接字连接设置超时的详细信息和示例代码。基本思想是使用非阻塞套接字,然后等待连接。

将套接字设置为非阻塞套接字,然后使用select()或poll()以及超时值检查可写性。如果select()返回超时您没有及时连接,您可以关闭套接字并处理连接故障。如果它返回并完成,则一切正常,您可以继续操作。

为您的套接字设置非阻塞模式,并使用
选择
检查是否建立了连接。示例是否是执行非阻塞的另一种方法-没有select()痛苦的阻塞就是检查GetLastError()中的eWoldBlock

// set socket as nonblocking
unsigned long value = 1;
if (ioctlsocket(yourSocket, FIONBIO, &value) == SOCKET_ERROR)
    return SOCKET_ERROR;

// (call connect here)

// check if connect would block
if (GetLastError() == EWOULDBLOCK)
    return TIMEOUT;

这看起来绝对是最简单的,我会试试。谢谢。问题是,任何可能阻塞的连接尝试都会失败。如果你正在连接另一台机器上的某个东西,那可能就是每次尝试。要使用ioctlsocket、FIONBIO、SOCKET_ERROR、GetLastError()、TIMEOUT,我必须包括什么
// set socket as nonblocking
unsigned long value = 1;
if (ioctlsocket(yourSocket, FIONBIO, &value) == SOCKET_ERROR)
    return SOCKET_ERROR;

// (call connect here)

// check if connect would block
if (GetLastError() == EWOULDBLOCK)
    return TIMEOUT;