rtt内lwip的socket是否是线程安全?

发布于 2015-01-13 17:24:29
RTT版本1.2.3。
LWIP版本1.4.1。
stm32f103zet + dm9000.
目前由我遇到的情况看应该不是线程安全的。
我的应用情况是
在线程A中建立tcp server,select等待客户端的连接和数据。收到数据后发送到handler线程处理。hander线程会对客服端进行回复。
有时会出现问题是:
handler线程收到数据后还没处理完,客户端就主动关闭了连接。之后进入线程A调用lwip_close(),线程A优先级高。handler线程处理完数据后又去给socket回应。就出现断言错误了。
这里
int
lwip_send(int s, const void *data, size_t size, int flags)
{
struct lwip_sock *sock;
err_t err;
u8_t write_flags;
size_t written;

LWIP_DEBUGF(SOCKETS_DEBUG, ("lwip_send(%d, data=%p, size=%"SZT_F", flags=0x%x)
",
s, data, size, flags));

sock = get_socket(s);
if (!sock) {
return -1;
}

我觉得是调用发送send后运行完上面的代码后调到了线程A关闭了socket。之后回到handler线程就出错了。
还请大神给个明确的答复。

查看更多

关注者
0
被浏览
2.5k
4 个回答
grissiom
grissiom 2015-01-13
好像这个问题提过几次。socket 不能由多个线程访问
OXape
OXape 2015-01-13
在发帖前我在论坛搜了下,没收到。如果不是线程安全那我在想办法。
小ARM菜菜
小ARM菜菜 2015-04-13
据说要开个LWIP的锁哼哼

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友