1

我正在制作一个基本上是代理的库,它是这样完成的:

socket s = -1;

void sendData(data){
   if(s == -1)
         s = createSocket();

}

奇怪的是,每次调用 sendData 时都会调用 createSocket,但不维护套接字状态......为什么?在服务器端,我得到套接字在发送数据后关闭,所以 s 实际上是关闭的......

编辑:这是创建套接字的签名:

SOCKET createSocket()
4

1 回答 1

7

您永远不会更新s代码中的值。 createSocket似乎socket按值接受参数。这意味着它将在 的本地副本上运行s,而不是在您打算更新的全局成员上运行。

您需要更改createSocketlike的签名

socket createSocket(void);
...
s = createSocket();

或者

createSocket(socket* s);
...
createSocket(&s);

反而

于 2013-05-02T13:54:46.937 回答