百度空间 | 百度首页 
 
查看文章
 
connect系统调用
2007年04月17日 星期二 下午 06:38
     下面是connect系统调用的函数原型:
     #include <sys/types.h>
     #include <sys/socket.h>
     int connect( int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen );
     man手册里面这样描述该系统调用:connect()系统调用把由文件描述符sockfd所代表的套接字连接到serv_addr所指定的地址上,参数addrlen用于标明serv_addr的大小。如果sockfd是SOCK_DGRAM类型的套接字,那么serv_addr就是数据报文缺省传向的那个地址,同时,只有来自该地址的数据报文才能被
该socket接收到。如果socket的类型是SOCK_STREAM或者SOCK_SEQPACKET,那么这个调用将试图同绑定在地址serv_addr的socket建立一个连接。一般来讲,面向连接协议的socket只可能一次成功调用connect,而无连接协议的socket可以多次使用connect改变它们的连接关系,同时,无连接协议的socket可以通过设置serv_addr的成员sa_family为AF_UNSPEC来解除已有的连接。
     在TCP/IP的源代码实现中,SOCK_DGRAM套接字类型的connect函数是inet_dgram_connect。该函数首先检查connect系统调用的serv_addr参数,如果它的sa_family成员的值是AF_UNSPEC,则表示解除该socket已有的连接,直接调用具体协议的disconnect函数,UDP协议的disconnect函数是udp_disconnect,该函数所要做的工作主要是重置struct inet_sock(表示是INET域的socket)的几个成员,sk_state置TCP_CLOSE;daddr,dport置0,以清目的地址和端口;sk_bound_dev_if清零,表示清输入网络设备接口;然后选择性地清源地址和源端口。然后清目的入口(struct dst_entry)。否则,在判定本地端口已被绑定之后,执行协议的connect函数,udp协议的connect函数是ip4_datagram_connect。

类别:udp协议 | 添加到搜藏 | 分享到i贴吧 | 浏览() | 评论 (9)
 
最近读者:
 
网友评论:
1
2007年04月18日 星期三 下午 10:30 | 回复
恩 继续关注大牛..呵呵
 
2
2007年04月18日 星期三 下午 10:52 | 回复
呵呵,最近情绪低落,导致这里也进展缓慢,对不住大家了。
 
3
2007年04月19日 星期四 下午 12:16 | 回复
难道感情问题还没解决? 呵呵
 
4
2007年04月19日 星期四 下午 01:22 | 回复
晕倒,这你也知道? 没有,只是百无聊赖,不想做事情.
 
5
2007年04月22日 星期日 下午 03:42 | 回复
第一次来,感觉很不错,也想学点东西。 希望能得到您的帮助 我能问一个问题吗?就是如何在linux上实现组播的路由功能呢?默认情况下linux9.0的路由器应该不支持组播,我怎么才能实现路由转发呢?在网上找了半天,写的都不是很清楚,希望您能帮帮我?谢谢!
 
6
2007年04月23日 星期一 下午 03:32 | 回复
抱歉,之个问题我也一下子答不上来。
 
7
2007年04月29日 星期日 下午 11:38 | 回复
写的很好.学习.
 
8
2007年05月03日 星期四 下午 12:55 | 回复
学习了
 
9
2007年05月09日 星期三 下午 04:17 | 回复
意志消沉的不要,创业的艰苦,生活的充满生机,顺便问一下用户空间API和系统调用在glibc中如何关联,(系统调用号存放在eax,参数存放在ebx,ecx,edx,esi,edi采用int $0x80软中断调用sys_call再具体查系统调用号,但这一切在libc中怎么体现在代码上那?)
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu