随笔分类 - 网络编程
摘要:http://blog.csdn.net/arcoolgg/article/details/1472969
阅读全文
摘要:Socket的地址查询函数http://blog.sina.com.cn/s/blog_988c054b010139e3.htmlhttp://www.cnblogs.com/cxz2009/archive/2010/11/19/1881693.html包含头文件#include函数原型int getaddrinfo( const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result );参数说明hostname:一个主机名或者地址串(IPv4的点分十进制串或者IP
阅读全文
摘要:我写了一个服务器程序, 在Linux下测试时, 总是莫名退出. 最后跟踪到是write调用导致退出. 用gdb执行程序, 退出时提示"Broken pipe".最后问题确定为, 对一个对端已经关闭的socket调用两次write, 第二次将会生成SIGPIPE信号, 该信号默认结束进程.具体的分析可以结合TCP的"四次握手"关闭. TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包. 按照TCP协议的语义, 表示对端只是关闭了其所负责的那一条
阅读全文
摘要:struct sockaddr_in inet_address; socklen_t name_length = sizeof(inet_address); if (getsockname(m_SocketFdReference->m_SocketFd, (struct sockaddr*)&inet_address, &name_length) == 0) { m_Info.local_address.SetIpAddress(ntohl(inet_address.sin_addr.s_addr)); m_Info.local_address.SetPort(ntohs
阅读全文
摘要:NPT_ResultNPT_BsdUdpMulticastSocket::JoinGroup(const NPT_IpAddress& group, const NPT_IpAddress& iface){ struct ip_mreq mreq; // set the interface address mreq.imr_interface.s_addr = htonl(iface.AsLong()); // set the group address mreq.imr_multiaddr.s_addr = htonl(group.AsLong()); // set sock
阅读全文
摘要:http://blog.csdn.net/jasenwan88/article/details/7763689用ioctl获得本地ip地址时要用到两个结构体ifconf和ifreq,它们对于大多数人来说都是比较陌生的,这里给一种比较简单的理解方法, 仅供参考.首先先认识一下ifconf和ifreq://ifconf通常是用来保存所有接口信息的 //ifreq用来保存某个接口的信息//if.hstructifreq {charifr_name[IFNAMSIZ];union{structsockaddr ifru_addr;structsockaddr ifru_dstaddr;structso
阅读全文
摘要:讨论Setsockopt选项http://c.chinaitlab.com/cc/ccjq/200806/752042_3.html总而言之,如果你肯定能一起发送多个数据集合(例如HTTP响应的头和正文),那么我们建议你设置TCP_CORK选项,这样在这些数据之间不存在延迟。能极大地有益于WWW、FTP以及文件服务器的性能,同时也简化了你的工作。示例代码如下: intfd, on = 1; … /* 此处是创建套接字等操作,出于篇幅的考虑省略*/ … setsockopt (fd, SOL_TCP, TCP_CORK, &on, sizeof (on)); /* cork */ wri
阅读全文
摘要:listen函数的监听队列长度参数http://blog.chinaunix.net/uid-20806345-id-3199231.htmllisten函数将主动套接字转换为被动监控套接字,其第二个参数backlog决定了内核的连接缓存队列长度。对于一个给定的监听套接字,内核维护两个队列:① 未就...
阅读全文
摘要:#include #include #include #include #include #include #include #include #include #include #include typedef long LONG;typedef char CHAR;#define CONST const#ifndef SUCCESS#define SUCCESS 0#endif#ifndef FAIL#define FAIL -1#endifLONG GetMac(CONST CHAR *pcIfName, CHAR *pcMac...
阅读全文