socket 编程,如何知道程序异常退出的原因?

时间:2022-09-18 22:49:28

    int portnum = 0;
    cfd = socket(AF_INET, SOCK_STREAM, 0);
    if(-1 == cfd)
    {
printf("socket fail ! \r\n");
return -1;
    }
    printf("socket ok !\r\n");
    bzero(&s_add,sizeof(struct sockaddr_in));
    s_add.sin_family=AF_INET;
    inet_pton(AF_INET, "", &s_add.sin_addr);
    s_add.sin_port=htons(portnum);

    if(-1 == connect(cfd,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
    {
printf("connect fail !\r\n");
return -1;
    }


这里我把server ip 设置 为空,port 设置 为0 。进行connect连接的时候,程序会异常退出。

理论上程序退出应该是系统给发进程发了某个信号。 有什么办法知道系统发送的是什么信号么?
这样就可以处理这个信号,而使程序不退出。

谢谢

7 个解决方案

#1



 70     clientaddr.sin_addr.s_addr = inet_addr("");
 71     clientaddr.sin_port = htons(0);
 72 
 73     if( connect(cli_sock, (struct sockaddr *)&clientaddr, sizeof(sockaddr_in)) < 0 )
 74     {
 75         perror("connect");
 76         return -1;
 77     }
 78     



结果:

connect: Network is unreachable

 startclieprocess failed!


程序没有异常中断的!你的可能是编译器作了优化吧!
这个情况connect函数会处理的,
Network is unreachable

#2


你这个程序系统才不会给你发信号,你这是自己退出的。

#3


if(-1 == connect(cfd,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
    {
    printf("connect fail !\r\n");
    return -1;//连接失败,这里return了吧?
    }

#4


GetLastError()查看出错的原因 然后进行处理  退出不退出由你自己控制

#5


抱歉 是这段代码会出现异常退出


#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <linux/in.h>
#include <string.h>

int main()
{

    int cfd; /* 文件描述符 */
    int recbytes;
    int sin_size;
    char buffer[1024]={0};    /* 接受缓冲区 */
    struct sockaddr_in s_add,c_add; /* 存储服务端和本端的ip、端口等信息结构体 */
    unsigned short portnum=0;  /* 服务端使用的通信端口,可以更改,需和服务端相同 */

    int socketTOServer = -1;
    char serverIP[16] = {0};
    int serverPort = 0;

    printf("Hello,welcome to client !\r\n");



 
    socketTOServer = socket(AF_INET, SOCK_STREAM, 0);

    if (socketTOServer == -1)
    {

    }



    bzero(&s_add,sizeof(struct sockaddr_in));
    s_add.sin_family=AF_INET;
    inet_pton(AF_INET, "", &s_add.sin_addr);
    s_add.sin_port=htons(serverPort); 

    int connectTimes = 0;

    if(-1 == connect(socketTOServer,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
    {
//perror("connect fail!");
printf("connect fail");
    }
    
    printf("sdfsfsf");
    return 0;



}



这个程序,没有打印最后一个pirinf就退出了。
抱歉, 请大家帮忙看看,

为什么connect失败会导致退出呢?

#6


引用 1 楼 max_min_ 的回复:

 70     clientaddr.sin_addr.s_addr = inet_addr("");
 71     clientaddr.sin_port = htons(0);
 72 
 73     if( connect(cli_sock, (struct sockaddr *)&clientaddr, sizeof(sockaddr_in)) < 0 )
 74     {
 75         perror("connect");
 76         return -1;
 77     }
 78     



结果:

connect: Network is unreachable

 startclieprocess failed!


程序没有异常中断的!你的可能是编译器作了优化吧!
这个情况connect函数会处理的,
Network is unreachable




请问  startclieprocess failed!  这个是怎么打印出来的呢?

#7


引用 6 楼 weishijian 的回复:
Quote: 引用 1 楼 max_min_ 的回复:


 70     clientaddr.sin_addr.s_addr = inet_addr("");
 71     clientaddr.sin_port = htons(0);
 72 
 73     if( connect(cli_sock, (struct sockaddr *)&clientaddr, sizeof(sockaddr_in)) < 0 )
 74     {
 75         perror("connect");
 76         return -1;
 77     }
 78     



结果:

connect: Network is unreachable

 startclieprocess failed!


程序没有异常中断的!你的可能是编译器作了优化吧!
这个情况connect函数会处理的,
Network is unreachable




请问  startclieprocess failed!  这个是怎么打印出来的呢?


这个是我自己函数接口里加的而已!总接口调用失败返回的而已!

#1



 70     clientaddr.sin_addr.s_addr = inet_addr("");
 71     clientaddr.sin_port = htons(0);
 72 
 73     if( connect(cli_sock, (struct sockaddr *)&clientaddr, sizeof(sockaddr_in)) < 0 )
 74     {
 75         perror("connect");
 76         return -1;
 77     }
 78     



结果:

connect: Network is unreachable

 startclieprocess failed!


程序没有异常中断的!你的可能是编译器作了优化吧!
这个情况connect函数会处理的,
Network is unreachable

#2


你这个程序系统才不会给你发信号,你这是自己退出的。

#3


if(-1 == connect(cfd,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
    {
    printf("connect fail !\r\n");
    return -1;//连接失败,这里return了吧?
    }

#4


GetLastError()查看出错的原因 然后进行处理  退出不退出由你自己控制

#5


抱歉 是这段代码会出现异常退出


#include <stdlib.h>
#include <sys/types.h>
#include <stdio.h>
#include <sys/socket.h>
#include <linux/in.h>
#include <string.h>

int main()
{

    int cfd; /* 文件描述符 */
    int recbytes;
    int sin_size;
    char buffer[1024]={0};    /* 接受缓冲区 */
    struct sockaddr_in s_add,c_add; /* 存储服务端和本端的ip、端口等信息结构体 */
    unsigned short portnum=0;  /* 服务端使用的通信端口,可以更改,需和服务端相同 */

    int socketTOServer = -1;
    char serverIP[16] = {0};
    int serverPort = 0;

    printf("Hello,welcome to client !\r\n");



 
    socketTOServer = socket(AF_INET, SOCK_STREAM, 0);

    if (socketTOServer == -1)
    {

    }



    bzero(&s_add,sizeof(struct sockaddr_in));
    s_add.sin_family=AF_INET;
    inet_pton(AF_INET, "", &s_add.sin_addr);
    s_add.sin_port=htons(serverPort); 

    int connectTimes = 0;

    if(-1 == connect(socketTOServer,(struct sockaddr *)(&s_add), sizeof(struct sockaddr)))
    {
//perror("connect fail!");
printf("connect fail");
    }
    
    printf("sdfsfsf");
    return 0;



}



这个程序,没有打印最后一个pirinf就退出了。
抱歉, 请大家帮忙看看,

为什么connect失败会导致退出呢?

#6


引用 1 楼 max_min_ 的回复:

 70     clientaddr.sin_addr.s_addr = inet_addr("");
 71     clientaddr.sin_port = htons(0);
 72 
 73     if( connect(cli_sock, (struct sockaddr *)&clientaddr, sizeof(sockaddr_in)) < 0 )
 74     {
 75         perror("connect");
 76         return -1;
 77     }
 78     



结果:

connect: Network is unreachable

 startclieprocess failed!


程序没有异常中断的!你的可能是编译器作了优化吧!
这个情况connect函数会处理的,
Network is unreachable




请问  startclieprocess failed!  这个是怎么打印出来的呢?

#7


引用 6 楼 weishijian 的回复:
Quote: 引用 1 楼 max_min_ 的回复:


 70     clientaddr.sin_addr.s_addr = inet_addr("");
 71     clientaddr.sin_port = htons(0);
 72 
 73     if( connect(cli_sock, (struct sockaddr *)&clientaddr, sizeof(sockaddr_in)) < 0 )
 74     {
 75         perror("connect");
 76         return -1;
 77     }
 78     



结果:

connect: Network is unreachable

 startclieprocess failed!


程序没有异常中断的!你的可能是编译器作了优化吧!
这个情况connect函数会处理的,
Network is unreachable




请问  startclieprocess failed!  这个是怎么打印出来的呢?


这个是我自己函数接口里加的而已!总接口调用失败返回的而已!