zhongfangqing 发表于 2006-08-17 16:08

socklen_t *,recvfrom()中第六个参数的类型,我被该类型蹂躏了

TMD,写的SOCKET程序收不到东西,就是因为它!
NND,用int *强转一下竟然不行,找了半天才知道错在这里。郁闷~

kimsuse 发表于 2012-10-12 10:54

你倒是说下阿,大哥

linux_c_py_php 发表于 2012-10-12 18:23

       ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
                        struct sockaddr *src_addr, socklen_t *addrlen);src_addr和addlen都是in,out参数, 在传入时必须预先赋值*addrlen, 让其尺寸等于传入的src_addr指向的内存大小, recvfrom函数会将对端的地址填到src_addr中, 地址长度填入addrlen中, 但如果你给的addrlen不够长, 操作如下: The returned address is truncated if the buffer provided is too small; in this case, addrlen will return a value greater
       than was supplied to the call.

dengxiayehu 发表于 2012-10-14 09:09

我每次都按如下计算下
socklen_t socklen = sizeof(struct sockaddr);

linux_c_py_php 发表于 2012-10-14 10:46

这位同学自己还没学明白又出来误导他人了, 能分清sockaddr, sockaddr_in, sockaddr_in6的区别吗?


IPV4/IPV6/UNIX-DOMAIN兼容做法:struct sockaddr_storage addr;
socklen_t socklen = sizeof(addr)dengxiayehu 发表于 2012-10-14 09:09 static/image/common/back.gif
我每次都按如下计算下
socklen_t socklen = sizeof(struct sockaddr);

dengxiayehu 发表于 2012-10-14 12:09

回复 5# linux_c_py_php
目前公司也就仅仅基于IPV4,我也就是这样用的。

linux_c_py_php 发表于 2012-10-14 12:13

那我告诉你, 你用错了:

socklen_t len = sizeof(struct sockaddr_in);

这才是正确的, 不知道你是如何正确运行你在公司写的程序的.

dengxiayehu 发表于 2012-10-14 12:09 static/image/common/back.gif
回复 5# linux_c_py_php
目前公司也就仅仅基于IPV4,我也就是这样用的。

dengxiayehu 发表于 2012-10-14 12:16

回复 5# linux_c_py_php
一口一个误导,论坛,交流,我只能以自己的角度来参与。

不对的,当然虚心接受。

你牛,你来啊,大家有问题,就直接@你好了,这样行吧。

linux_c_py_php 发表于 2012-10-14 12:24

其实你那样用是没问题的, 我想起来sockaddr和sockaddr_in的内存尺寸是一样的.

linux_c_py_php 发表于 2012-10-14 12:26

你回答的有问题, 我有权利提醒楼主, 你也有权利继续回复, 不要咬我, 谢谢.

dengxiayehu 发表于 2012-10-14 12:16 static/image/common/back.gif
回复 5# linux_c_py_php
一口一个误导,论坛,交流,我只能以自己的角度来参与。

页: [1] 2
查看完整版本: socklen_t *,recvfrom()中第六个参数的类型,我被该类型蹂躏了