免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2155 | 回复: 5
打印 上一主题 下一主题

[C] 菜鸟问题,关于SOCKET [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-28 10:20 |只看该作者 |倒序浏览
在A机器上用telnet连接B邮件服务器操作,一切正常
但用下面这段C代码出现错误,gdb调试,走到send(sockfd, helo, strlen(helo), 0);时
报错
Program received signal SIGPIPE, Broken pipe.
0x00000036c340d1c5 in send () from /lib64/libpthread.so.0

代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <error.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>

int main(void)
{
    struct sockaddr_in servaddr;
    int sockfd;
    char *recvstr;

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    bzero(&servaddr, sizeof(servaddr));
    inet_pton(AF_INET, "172.18.246.100", &servaddr.sin_addr);
    servaddr.sin_port = htons(25);
    connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
    char *helo = "HELO\r\n";
    send(sockfd, helo, strlen(helo), 0);
    recv(sockfd, recvstr, 100, 0);
    printf("%s\n", recvstr);
    return 0;
}

论坛徽章:
0
2 [报告]
发表于 2011-06-28 15:02 |只看该作者
我也想写一个发邮件的程序,网上下了不少源代码。都是connect的时候失败。

论坛徽章:
0
3 [报告]
发表于 2011-06-28 16:08 |只看该作者
连个错误检查都没有
你敢确定connect连上了?

论坛徽章:
0
4 [报告]
发表于 2011-06-28 16:37 |只看该作者
是的,connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));

这里都没有判断是否连接上

论坛徽章:
0
5 [报告]
发表于 2011-06-29 09:44 |只看该作者
嗯,解决了,是connect错误,struct里少给了一个值,感谢各位

论坛徽章:
0
6 [报告]
发表于 2011-06-29 10:58 |只看该作者
SIGPIPE写网络程序是必须要忽略掉的信号
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP