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
抱歉 是这段代码会出现异常退出
这个程序,没有打印最后一个pirinf就退出了。
抱歉, 请大家帮忙看看,
为什么connect失败会导致退出呢?
#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
请问 startclieprocess failed! 这个是怎么打印出来的呢?
#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
抱歉 是这段代码会出现异常退出
这个程序,没有打印最后一个pirinf就退出了。
抱歉, 请大家帮忙看看,
为什么connect失败会导致退出呢?
#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
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
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! 这个是怎么打印出来的呢?
这个是我自己函数接口里加的而已!总接口调用失败返回的而已!