首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

套接口选项设置 / UDP套接口

Posted on 2009-11-01 22:54  放飞自我  阅读(694)  评论(0编辑  收藏  举报

在这一章里主要讲述了用多种方法获取和设置套接口选项。

l         getsockopt/setsockopt

l         fcntl

l         ioctl

 

<sys/socket.h>

int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen)

int setsockopt(int sockfd, int level, int optname,

const void *optval, socklen_t *optlen)

sockfd只想一个打开的套接口描述字,level(级别)指定系统中解释选项的代码,普通套接口代码或特定协议的代码。

optval是一个指向变量的指针,通过它可由上面两个函数获取或者存储当前值。此变量大小由最后一个参数指定。

    level和optname可以从《unix网络编程》第七章获取,太多不写了,也没怎么看,以后的章节据说还会接触到,一下子全看了也是忘了。

 

 

     相对于tcp套接口编程,udp相对简单。因为tcp是可靠连接,而UDP是非可靠的。他们本质上有所不同。前面提到的函数可以用到。这里还有一些

 

<sys/socket.h>

ssize_t recvfrom( int sockfd, void *buff, size_t nbytes, int flags,

struct sockaddr *from, socklen_t *addrlen);

ssize_t sendto( int sockfd,const void *buff, size_t nbytes,

 int flags, const struct sockaddr *to, socklen_t addrlen);

              成功-返回读写字节数, 失败返回-1

UDP的connect函数,结果与tcp调用它毫不相同,没有三次握手过程。内核只是记录对方的ip和端口号,他们包含在传递给connect的套接口地址结构中,并立即返回给调用进程。

此时不能再用sendto而使用write或send;接受不使用recvfrom而使用read或recv。

 

UDP取法流量控制,可以根据第七章设置UDP缓冲区大小,SO_RCVBUF

UDP外出接口确定,可以调用getsockname函数获得本地ip地址和端口号

可以使用select函数控制tcp和udp服务器