维护库中的变量状态

时间:2013-05-02 13:52:32

标签: c

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

socket s = -1;

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

}

奇怪的是,每次调用sendData时都会调用createSocket,不保持套接字状态...为什么?在服务器端,我在发送数据后关闭了套接字,因此s实际上是关闭的......

编辑: 这是create socket的签名:

SOCKET createSocket()

1 个答案:

答案 0 :(得分:7)

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

您需要更改createSocket的签名

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

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

代替