inet_ntoa 的一个小问题

一个简单点的阻塞式tcp服务器如下所示:

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

#include <stdio.h>

#include <string.h>

#include <sys/socket.h>

#include <netinet/in.h>

                                                                                                                 

int main(int
argc, char**argv)

{

    int
listenfd,connfd,n, ret;

    struct
sockaddr_in servaddr, cliaddr;

    socklen_t clilen;

    pid_t     childpid;

    char
mesg[1000], *peeraddr;

    listenfd = socket(AF_INET, SOCK_STREAM, 0);

    if
(listenfd < 0) {

        printf("create socket error\n");

        return
-1;

    }

    printf("create socket success\n");

    memset(&servaddr, 0, sizeof(servaddr));

    servaddr.sin_family = AF_INET;

    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);

    servaddr.sin_port = htons(6789);

    ret = bind(listenfd, (struct
sockaddr *)&servaddr, sizeof(servaddr));

    if
(ret == -1) {

        printf("bind error\n");

        return
-1;

    }

    printf("bind success\n");

    ret = listen(listenfd, 1024);

    if
(ret == -1) {

        printf("listen error\n");

        return
-1;

    }

    printf("listening...\n");

    for
(;;) {

        clilen = sizeof(cliaddr);

        connfd = accept(listenfd, (struct
sockaddr *)&cliaddr, &clilen);

        printf("Accept request from %s\n", inet_ntoa(cliaddr.sin_addr));

        n = read(connfd, mesg, 1000);

        if
(n < 0) {

            printf("read error!\n");

        }

        printf("Received:%s\n", mesg);

        close(connfd);

    }

}

  编译期间没有遇到问题。运行的时候程序在47行收到了segment fault错误。用man手册查看inet_ntoa,调用方式如下:

?





1

char
*inet_ntoa(struct
in_addr in);

  cliaddr的类型定义是:

struct sockaddr_in { /* in netinet/in.h */

?





1

2

3

4

5

6

<em id="__mceDel">       sa_family_t       sin_family;

       in_port_t         sin_port;

       struct
in_addr    sin_addr;  

       unsigned char    
sin_zero[sizeof(struct
sockaddr) - sizeof(sa_family_t) - sizeof(in_port_t), sizeof(struct
in_addr)];

};

</em>

  乍一看,没什么问题啊,怎么会出现段错误呢?

捣腾了半天,才发现是缺少了inet_ntoa所在的头文件 arpa/inet.h,包含该头文件即可。好坑。

inet_ntoa 的一个小问题,布布扣,bubuko.com

时间: 2024-10-11 13:16:14

inet_ntoa 的一个小问题的相关文章

关于链表的一个小程序

关于链表的一个小程序: /**************************链表*****************************//* 具备功能 *//* 链表按元素位置插入 *//* 链表按元素位置删除 *//* 链表全表遍历 *//* 链表整表创建(头插法) *//* 链表整表创建(尾插法) *//* 链表整表删除 *//**************************链表*****************************/ #include<stdio.h>#in

原创观点:还在认为企业或个人只能申请一个小程序吗?

今天第一次体验了整个小程序注册流程,使用的是我自己的这个简单的教程(个人无appid如何进行申请开发者权限,简单操作步骤),教程虽然是我的,我自己却没有真的实践过,真是误人子弟,自己也不一定能知道:今天亲自测试了一下:首先走完邮箱验证: 验证完毕后,开始进入信息登录,这里,有一些关键信息,是本文观点的主要支撑: 请输入管理员的身份证号码,一个身份证号码只能注册5个小程序. 然后填写完毕后,到了第二个关键点: 为了验证你的身份,请用绑定了管理员本人银行卡的微信扫描二维码. 这个点,透露了两个信息,

先做一个“小程序”——关于微信应用号的六大猜想

先做一个“小程序”——关于微信应用号的六大猜想 9月 21 日,苦等了9个多月的时间,应用号终于与我们见面了,命名为「小程序」. 01 为什么推出小程序? 考虑到小程序对整个APP市场的影响,毫无疑问会对现有的APP生态带来一定的冲击.但是,之所以推出小程序,最直接的原因可能是为了构建和扩充微信生态链,让微信更具开放性. 如我们所知,目前微信公众号分为三类: • 服务号,连接人和商品,目前很多电商企业,以及在微信端提供产品和服务的企业都用服务号. • 订阅号,微信官方的定位是阅读,连接人和资讯的

基于宿主机制作一个小系统

一.Linux系统的启动流程 1.启动程序 Linux系统的启动流程为:POST-->BIOS(BootSequence)-->MBR(bootloader,446)--> Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab). 首先上电自检POST:它负责完成对CPU.主板.内存.软硬盘子系统.显示子系统(包括显示缓存).串并行接口.键盘.CD-ROM光驱等的检测.主要检查硬件的好坏. 紧接着就是BIOS进行硬件相关初始化,之

一个小软件练习了一下python

朋友用python写了一个小软件,刚好没有怎么认真用python编过程序,于是就改进一下 主要练习了一些知识: 1.python Tkinter 页面布局,这次软件用了用了grid 2.Event 事件绑定 3. 字符串的处理. 4.tkFileDialog 的使用 5.一点点面向对象的编程. 6.python编码的结构以及练习Code好习惯 后期改进: 1. 加滚动条 2. 加算法变换文件 3. 可以修改保存路径 4.强化错误处理 5.添加函数,根据类型,用office直接双击打开转换成功的文

FMX相当于在界面上自己又做了一个小操作系统

FMX的自画界面我也不看好,比如复制粘贴,太丑了,系统做得很好很精细的复制粘贴界面,就是无法调出,比如MIUI,复制粘贴还能有个放大镜,可以选择到屏幕边缘的文字,可以选择剪贴板内多个可粘贴的文字:还有那个Memo,有的时候该折行的不折行,有的文字看不到了.文本输入框,隐藏剪贴板后,再点击就弹不出来了:系统本身的文本框就没有这个问题.底部输入框输入时自动上移界面,好像是操作系统本身就有的吧,FMX还得自己编很多代码,也不一定编好.自己编码补漏洞是另外一回事.FMX给我的感觉是在界面上自己又做了一个

Word 2003安装时的一个小问题

Word2003安装时的一个小问题 今天给一个老师安装软件,出现了这个问题? 系统管理员设置了系统策略,禁止进行此安装. 解决方法 开始-运行-regedit 在注册表项里找到下面这个选项: HKEY_CLASSES_ROOT\Installer\Products\4080110900063D11C8EF10054038389C 将这项删除.再进行安装就可以了.

简易的shell ---- MOS 的一个小练习题

想到自己的好多图片还有代码在上一次硬盘挂掉的时候丢失, 心中就是阵痛... 这个简单的shell代码被放在临时的pdf文档中得以被保留了下来... 阿门...今天想写个简单的数据库的时候, 感觉是不是要做个交互页面, 不让用户写程序, 模仿MySQL简单的命令, 用户傻瓜化就好了... 交互的方式可以是shell.  其实中科院孟宁老师的一个OO课的前几课的一个小作业就是自己写个shell. 不难. RTFSC 于是... demo如下: /***************************

【ASP.net控件】DropDownList数据绑定一个小bug

绑定数据出现这种情况,明明在第一项插入了一条数据,却始终在DropDownList中没有显示出来. 代码如下: if (!IsPostBack) { //绑定城市 DataTable dtCity = new HighSearch().GetCitySelect(); DropDownList1.DataSource = dtCity; DropDownList1.DataValueField = "citycode"; DropDownList1.DataTextField = &q