【发布时间】:2015-06-07 07:17:52
【问题描述】:
我正在尝试确定最近启动的进程绑定的 TCP 端口是否实际上被该特定进程使用。
获取这个program.cpp
int daemonport = 11234;
struct sockaddr_in loopback;
memset ((char*) &loopback, 0, sizeof (loopback));
socklen_t len = sizeof (loopback);
loopback.sin_family = AF_INET;
loopback.sin_port = htons (daemonport);
loopback.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
daemonfd = socket (AF_INET, SOCK_STREAM, 0);
if (daemonfd < 0)
{
errx (EXIT_FAILURE, "Critical error");
}
if (bind (daemonfd, (struct sockaddr*) &loopback, sizeof (loopback)) != 0)
{
errx (EXIT_FAILURE, "Daemon already running, TCP port: '%d'", daemonport);
}
if (getsockname (daemonfd, (struct sockaddr*) &loopback, &len) != 0)
{
errx (EXIT_FAILURE, "Critical error");
}
printf ("%d\n", ntohs (loopback.sin_port));
if (daemon (1, 0) < 0)
{
close (daemonfd);
errx (EXIT_FAILURE, "Failed to daemonize!");
}
// event loop...
close (daemonfd);
现在将 tcp 套接字绑定(但未侦听)到端口 11234,我想使用 bash 脚本检查该端口是否被进程绑定。
我尝试了各种 netstat 和 lsof 模式都没有成功:
netstat -a | grep ':11234' 以及 lsof -i :11234。
他们都不用绑定的端口打印一行。
但是当我第二次尝试运行该程序时,它会出错:
Daemon already running, TCP port: '11234'
【问题讨论】: