- 论坛徽章:
- 1
|
回复 chenzhanyiczy
看代码不容易看出来。
send和write一样,write socket几下子就调用send(之类)了 ...
思一克 发表于 2010-10-20 08:43 ![]()
还是看源代码吧,请看:
778 int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
779 size_t size)
780 {
781 struct iovec *iov;
782 struct tcp_opt *tp = tcp_sk(sk);
783 struct sk_buff *skb;
784 int iovlen, flags;
785 int mss_now;
786 int err, copied;
787 long timeo;
788
789 lock_sock(sk);790
TCP_CHECK_TIMER(sk);
。。。省略很多
971 out:
972 if (copied)
973 tcp_push(sk, tp, flags, mss_now, tp->nonagle);
974 TCP_CHECK_TIMER(sk);
975 release_sock(sk);976
return copied;
粗体部分!
可以看到这个加了锁。它的意思是锁住整个套接口。我不明白为什么会出现交叉出错? |
|