当前位置: 技术问答>linux和unix
【socket编程问题】向一个未connect()的sockfd写入数据,程序退出了,为什么?
来源: 互联网 发布时间:2017-03-04
本文导语: 本帖最后由 nilite 于 2010-03-09 16:59:25 编辑 描述如下: 我用socket()创建了一个sockfd,但是故意连接失败(或者不连接),这时再向sockfd写入一些数据write(),照理说应该返回我错误,但是程序毫无征兆的退出了,这是为...
我用socket()创建了一个sockfd,但是故意连接失败(或者不连接),这时再向sockfd写入一些数据write(),照理说应该返回我错误,但是程序毫无征兆的退出了,这是为什么呢?太奇怪了。
源代码如下:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
/*取得main函数参数*/
struct sockaddr_in address;//socket地址
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = htons(6666);
int len = sizeof(address);
char send_buf[30] = "大家好,我是发送内容";//发送内容
/*如果有参数,则以参数里的内容作为IP连接,如果无参数,则使用默认值*/
if (argc != 4)
{
printf("*******************************************rn");
printf("你输入的参数不全,正确的格式应该为:rn");
printf("./sc_eth_com "ip地址" "端口" "发送内容"rn");
printf("未输入的参数将使用默认值连接rn");
printf("*******************************************rn");
}
if (argc > 1)
{
address.sin_addr.s_addr = inet_addr(argv[1]);
if (address.sin_addr.s_addr == INADDR_NONE)
{
printf("IP地址格式错误,参数被强制转换为127.0.0.1rn");
address.sin_addr.s_addr = inet_addr("127.0.0.1");
}
}
if (argc > 2)
{
address.sin_port = htons((unsigned short)atoi(argv[2]));
}
if (argc > 3)
{
strncpy(send_buf, argv[3], 29);
send_buf[29] = '';
}
/*展示所有参数*/
char port_str[6] = {0};
sprintf(port_str, "%d", ntohs(address.sin_port));
printf("参数值 >>> IP地址:%srn", inet_ntoa(address.sin_addr));
printf("参数值 >>> 端口号:%srn", port_str);
printf("参数值 >>> 发送内容:[%s]rn", send_buf);
#if 1
if (write(5, send_buf, strlen(send_buf)+1)