随笔分类 -  Unix网络编程

摘要:connect函数将激发TCP的三路握手过程,而且仅在连接建立成功或出错时才返回。CLOSED状态到SYN_SENT状态,若成功则再转移到ESTABLISHED状态。 对于bind函数,如果TCP服务器没有把IP地址捆绑到它的套接字接口,内核就把客户发送的SYN的宿IP地址作为服务器的源IP地址。如果选择指定IP地址为通配地址,那么内核将等到套接口已连接(TCP)或已在套接口上发出数据报(UDP)时才选择一个本地IP地址。 如果让内核来为套接字选择一个临时端口号,那么必须注意,bind并不返回所选的值,bind的第二个参数有const限定词,必须调用getsockname来返回协议地址。 .. 阅读全文

posted @ 2011-11-27 10:51 SomethingReview 阅读(203) 评论(0) 推荐(0)

摘要:套接字地址结构:从进程到内核的传递,从内核到进程的传递 网际套接口地址结构 通用套接字地址结构 我们总是通过指针传递这些结构,而且将结构的大小作为另外一个参数来传递。当套接口函数填写结构时,结构长度也作为指针传递,这样它的值可以被函数更新,我们把这样的参数称为值-结果参数。 TCP套接口为应用程序提供了一个字节流,它们没有记录标记,函数read的返回值可以比我们要求的数量少,但并不表示错误。 网络协议在处理多字节整数时使用大端字节序。 阅读全文

posted @ 2011-11-27 10:51 SomethingReview 阅读(106) 评论(0) 推荐(0)

摘要:TCP提供客户和服务器的连接,跨越连接交换数据,然后终止连接。 TCP提供可靠性。TCP向另一端发送数据要求对方返回一个确认,如果确认没有收到,TCP将自动重传并等待更长的时间。数次重传失败后TCP才放弃。 TCP通过给所发送的数据的每一个字节关联一个序列号进行排序。如果发送的分节非顺序到达,接收方的TCP会根据它们的序列号重新排序,再把结果数据传递给应用进程。如果TCP接收到重复的数据,它可以判断数据是重复的,从而把它丢弃掉。 TCP提供流量控制。TCP总是告诉对方它能够接收多少字节的数据,这称为通告窗口。 TCP的连接是全双工的。因此TCP必须跟踪每个方向数据流的状态信息,如序列号和通告. 阅读全文

posted @ 2011-11-27 10:51 SomethingReview 阅读(146) 评论(0) 推荐(0)

摘要:TCP是无记录边界的字节流协议。 TCP本身不提供记录结束标记,应用程序需要确定记录边界的话,必须自己去实现。FTP和SMTP使用\r\n构成序列终止记录。Sun RPC和DNS使用TCP时,在每个记录的前面放一个二进制计数值,由它给出记录的长度。 错误处理:包裹函数 每当在一个Unix函数发生错误时,全局变量errno将被置成一个指示错误类型的正数,函数本身则通常返回-1。err_sys检查errno变量并输出其相应的出错消息。如果函数不返回错误,errno的值就没有定义。值0不表示任何错误。 把errno值存于全局变量不适合共享所有全局变量的多线程。 snprintf检查目标缓冲区是否溢. 阅读全文

posted @ 2011-11-27 10:50 SomethingReview 阅读(117) 评论(0) 推荐(0)