我正在创建一个基本上是代理的库,它是这样完成的:
socket s = -1;
void sendData(data){
if(s == -1)
s = createSocket();
}
奇怪的是,每次调用sendData时都会调用createSocket,不保持套接字状态...为什么?在服务器端,我在发送数据后关闭了套接字,因此s实际上是关闭的......
编辑: 这是create socket的签名:
SOCKET createSocket()
答案 0 :(得分:7)
您永远不会在代码中更新s
的值。 createSocket
似乎按值socket
参数。这意味着它将在s
的本地副本上运行,而不是您要更新的全局成员。
您需要更改createSocket
的签名
socket createSocket(void);
...
s = createSocket();
或
createSocket(socket* s);
...
createSocket(&s);
代替