环境:ubuntu18.0.4
正常流程:
使用CLion编写unix socket server端和client端,然后用gcc生成可执行文件;
以SOCK_STREAM类型创建server socket;
bind相应的地址;
listen客户端的连接;
accept接收客户端的连接;
测试很顺利;
将此demo移植到Android环境;
问题:
遇到bind返回-1的问题,由于前期没有判断这个返回值,所以遇到奇怪的问题,accept并没有被阻塞住,后来经过排查
扫描二维码关注公众号,回复:
16678814 查看本文章
是由于bind失败的问题;
原因:
由于在bind之前bind的文件已存在导致bind失败;
解决办法:
bind之前,判断该文件是否存在,若存在删除即可;
疑惑:
为什么在linux环境就没有这个问题,在android环境就有呢?
后续:在linux环境下没有问题的原因是:
/* delete the socket file */ unlink("server_socket"); /* create a socket */ int server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
在创建socket之前调用了unlink方法