为什么UDP模式运行connect()API?

时间:2018-10-26 15:20:40

标签: c linux sockets udp netcat

客户端在TCP模式下的连接应运行connect() api。

在客户端(nc)下面以UDP模式(-u)连接,但是strace在下面显示了connect()呼叫,

[root@machine ~]# uname -a
Linux machine 3.10.0-862.3.2.el7.x86_64 #1 SMP Tue May 15 18:22:15 EDT 2018 x86_64 x86_64 x86_64 GNU/Linux
[root@machine ~]# lsof -i udp | grep rsyslog
rsyslogd  556023    root   19u  IPv4 74002548      0t0  UDP *:52246 
[root@machine ~]# strace nc -u localhost 52246
execve("/bin/nc", ["nc", "-u", "localhost", "52246"], [/* 17 vars */]) = 0
:
:
socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) = 3
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK)    = 0
setsockopt(3, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0
connect(3, {sa_family=AF_INET, sin_port=htons(52246), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
select(4, [3], [3], [3], NULL)          = 1 (out [3])
getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
select(4, [0 3], [], [], NULL^Cstrace: Process 131125 detached
 <detached ...>

为什么udp模式连接需要建立连接? nc是坏客户吗?

0 个答案:

没有答案