今天被一个sock_fd的值的问题折磨了半天
貌似效果不错,做个笔记 【相关文章:别人编写的,自己加工过的qmail安装文】
靠,干脆花了1个小时看了一下内核 【扩展阅读:今天晚上自己做的饭,吃得好饱】
可以直接找我要文件,如果看起来不爽的话 【扩展信息:开篇第一章】
pblog的缩进还挺麻烦的,不管它了
/*
网络编程中要注意描述符的边界问题比如socket描述符等
描述符等于0的情况也是正常的
if (sock >= 0) //应该按照 sock >= 0的情况来判断
...如果是
if (sock > 0) ... //可能出现的问题是,tcp连接不能建立,包不能正确传送或者不能传送 值为0属于正常情况我考,看socket源代码,日
socket也是加入系统标用表中的系统函数,参考 /kernel/sys.c
*/// /net/core/sock.c
// /net/socket.c/* 入口函数 sys_socket();
* 原型: asmlinkage long sys_socket(int family, int type, int protocol); * 调用函数 socket(); * 原型: int socket(int domain, int type, int protocol); * 两者应该是对应起来的 * 取值范围 * 参考 /include/linux/socket.h address family的两组宏定义 */ asmlinkage long sys_socket(int family, int type, int protocol) { int retval; struct socket *sock;//创建socket,由此可以看出socket是非负整数值
retval = sock_create(family, type, protocol, &sock); if (retval < 0) goto out;//加入描述符表,呵呵
retval = sock_map_fd(sock); if (retval < 0) goto out_release; //这会已经分配了socket,所以返回前要释放资源out:
/* it may be already another descriptor 8) not kernel problem. */ // 正常返回,创建失败返回 return retval;out_release:
sock_release(sock); return retval; }/* sock_create 最终调用到 函数 __sock_create()
* 函数名字前面加两个dash的表示系统内部函数 ... 下一页