小编hoa*_*vnu的帖子

在没有通过Linux中的Socket连接的情况下发送数据时崩溃

我正在使用C语言通过使用命令在Linux中通过套接字发送数据

send(ServerSocket, cSendBuff, strlen(cSendBuff), 0);
Run Code Online (Sandbox Code Playgroud)

程序是:

  1. 创建套接字
  2. 连接到服务器
  3. while(条件):发送数据

当我在Linux环境中运行该程序时,如果已连接,则没有问题.但是为了在运行时处理失败的连接,我检查一些情况并得到如下结果:

情况1:

  1. 创建套接字:无创建(注释掉创建功能)
  2. 连接到服务器:无连接(注释掉连接功能)
  3. 发送数据 - > 失败(返回-1)但没有崩溃

案例2:

  1. 创建套接字:成功
  2. 连接到服务器:失败甚至无连接(注释掉连接功能)
  3. 发送数据 - > 崩溃

然后,我尝试了3个不同的套接字值,没有连接到服务器

案例3:

  1. ServerSocket = -1 - >发送数据:失败
  2. ServerSocket = 0 - >发送数据:失败
  3. ServerSocket = 4 - >发送数据:崩溃

如果发送失败,这是正确的,但我不明白为什么我在其他情况下崩溃.我试过Windows但没问题,Linux和Windows之间有什么不同?是否有意义?我想打开套接字并只连接到服务器一次,然后发送数据一千次,所以如果"崩溃"在这种情况下有意义,如何在连接失败的情况下解决这个问题?谢谢你的时间.

以下是案例2(通过停止服务器连接失败以测试连接失败的情况):

ServerSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_IP) ;
...
iResult = connect(ServerSocket,(struct sockaddrx *)&server , sizeof(server));
iResult = send(ServerSocket, cSendBuff, strlen(cSendBuff), 0);
if(iResult<0)
{...}
Run Code Online (Sandbox Code Playgroud)

案例3如下:

    //ServerSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_IP) ;
    ...
    //iResult = connect(ServerSocket,(struct sockaddrx *)&server , …
Run Code Online (Sandbox Code Playgroud)

c sockets linux crash

1
推荐指数
1
解决办法
4277
查看次数

标签 统计

c ×1

crash ×1

linux ×1

sockets ×1