嵌入式linux TCP / IP通信问题

时间:2018-02-08 10:55:43

标签: c++ embedded-linux tcp-ip

我在嵌入式linux下运行TCP / IP服务器:

int sId = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0);

sockaddr_in servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(5000);
bind(sId, (sockaddr*)(&servAddr), sizeof(servAddr));

listen(sId, 10);

int cId = accept(sId, NULL, NULL);

执行上面的代码后,我可以通过read()从客户端接收消息,并使用write()发送响应。例如:

for (;;)
{
    int c = std::cin.get();

    switch(c)
    {
    case 'q': break;
    case 'r': recv(cId, /*...*/ , MSG_DONTWAIT); // I skip the code responsible for displaying the message
    case 'w': write(cId, ... // as above
    }
}

只要客户端连接,一切都很好。当客户端断开连接并尝试向其发送消息时,问题就开始了。当我在断开连接后第一次调用write()时它返回成功,当我第二次调用它时,程序退出而没有错误

有没有一些聪明的方法可以检测到这样的错误?

PS。我添加了简化代码来解决问题。在创建的程序中,接收消息和发送回复在单独的线程中实现。这就是为什么我在寻找能让我在调用write()时检测错误的东西。

0 个答案:

没有答案