acl-dev / acl

C/C++ server and network library, including coroutine,redis client,http/https/websocket,mqtt, mysql/postgresql/sqlite client with C/C++ for Linux, Android, iOS, MacOS, Windows, etc..
https://acl-dev.cn
GNU Lesser General Public License v3.0
2.83k stars 937 forks source link

socket_stream是协程安全的吗 #338

Closed ChrisCatCP closed 2 months ago

ChrisCatCP commented 2 months ago

两个协程(同线程)同时操作貌似会导致死锁,一个读一个写

zhengshuxin commented 2 months ago

这种用法应该是可以的,Acl 中的协程机制专门处理了这种场景,我自己也是这样用的,你可以给出一个简单示例测一下。

ChrisCatCP commented 2 months ago

那就奇怪了。。现在是写的协程一写入之后读的协程就什么数据都读不到了,应该就是死锁了。。

ChrisCatCP commented 2 months ago

找到原因了 写入的那个协程里用了alive就会死锁...

zhengshuxin commented 2 months ago

在协程模式下调用alive时确实有问题,需要处理recv/recvfrom/recvmsg中flags为MSG_PEEK的场景,目前该问题已修复,谢谢。

ChrisCatCP commented 2 months ago

好的好的,谢谢😁