亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3609 | 回復(fù): 6
打印 上一主題 下一主題

[C] UDP數(shù)據(jù)報(bào)獲取系統(tǒng)時(shí)間的問題 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-02-15 19:55 |只看該作者 |倒序?yàn)g覽
《Linux程序設(shè)計(jì)》第三版,第15章最后關(guān)于通過UDP獲取系統(tǒng)時(shí)間的例子。下面是完整代碼:

  1. #include <sys/socket.h>
  2. #include <netinet/in.h>
  3. #include <netdb.h>
  4. #include <stdio.h>
  5. #include <unistd.h>
  6. #include <stdlib.h>

  7. int main(int argc, char *argv[])
  8. {
  9.     char *host;
  10.     int sockfd;
  11.     int len, result;
  12.     struct sockaddr_in address;
  13.     struct hostent *hostinfo;
  14.     struct servent *servinfo;
  15.     char buffer[128];

  16.     if(argc == 1)
  17.     {
  18.         host = "localhost";
  19.     }
  20.     else
  21.     {
  22.         host = argv[1];
  23.     }

  24.     hostinfo = gethostbyname(host);
  25.     if(!hostinfo)
  26.     {
  27.         fprintf(stderr, "no host: %s\n", host);
  28.         exit(1);
  29.     }

  30.     servinfo = getservbyname("daytime", "udp");
  31.     if(!servinfo)
  32.     {
  33.         fprintf(stderr, "no daytime service\n");
  34.         exit(1);
  35.     }
  36.     printf("daytime port is %d\n", ntohs(servinfo->s_port));

  37.     sockfd = socket(AF_INET, SOCK_DGRAM, 0);
  38.     address.sin_family = AF_INET;
  39.     address.sin_port = servinfo->s_port;
  40.     address.sin_addr = *(struct in_addr *)*hostinfo->h_addr_list;
  41.     len = sizeof(address);

  42.     result = sendto(sockfd, buffer, 1, 0, (struct sockaddr *)&address, len);
  43.     result = recvfrom(sockfd, buffer, sizeof(buffer), 0,
  44.                         (struct sockaddr *)&address, &len);
  45.     buffer[result] = '\0';
  46.     printf("read %d bytes: %s\n",result, buffer);

  47.     close(sockfd);

  48.     exit(0);
  49. }
復(fù)制代碼


按照書上的說明,在/etc/inetd.conf中加入daytime UDP服務(wù),加入下面這行
daytime    dgram    udp    wait    root    internal

但是程序一直阻塞在recvfrom處。。。。為什么會(huì)這樣?

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2010-02-15 20:14 |只看該作者
重啟 (x)inetd

# FreeBSD + inetd
/etc/rc.d/inetd restart

# Linux + xinetd
/etc/init.d/xinetd restart

mci4:~$ ./daytime
daytime port is 13
read 26 bytes: 15 FEB 2010 20:14:32 CST

mci4:~$

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2010-02-15 20:25 |只看該作者
重啟 (x)inetd

# FreeBSD + inetd
/etc/rc.d/inetd restart

# Linux + xinetd
/etc/init.d/xinetd  ...
langue 發(fā)表于 2010-02-15 20:14


還是不行啊。。。

下面兩種方法都不行
/usr/sbin/inetd restart
killall -HUP inetd

debian系統(tǒng)

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2010-02-15 20:42 |只看該作者
于是乎涉及到RP問題?很不巧,我用的就是Debian,和xinetd。

mci4:~$ dpkg --list | grep xinetd
ii  xinetd                          1:2.3.14-7               replacement for inetd with many enhancements
mci4:~$

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2010-02-15 20:43 |只看該作者
/usr/sbin/inetd 是否接受 restart 命令,這我不清楚了。
inetd 進(jìn)程是否接受 SIGHUP,這我也不清楚。
要不你看看 /etc/init.d/ 下面有沒有啟動(dòng)/停止的腳本?

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2010-02-15 20:57 |只看該作者
debian:/home/parco/test/socket# dpkg --list | grep inetd
ii  openbsd-inetd              0.20050402-6                    The OpenBSD Internet Superserver
ii  update-inetd                 4.27-0.5                             inetd.conf updater

/etc/init.d/下面有這些應(yīng)用
acct          exim4          module-init-tools      openbsd-inetd          stop-bootlogd-single
acpid        gdm             mountall-bootclean.sh      portmap                    sudo
atd           glibc.sh        mountall.sh                pppd-dns         sysklogd
avahi-daemon     halt                   mountdevsubfs.sh     procps.sh         udev
bootclean            hostname.sh     mountkernfs.sh         rc                     udev-mtab
bootlogd             hwclock.sh         mountnfs-bootclean.sh  rc.local    umountfs
bootmisc.sh         ifupdown           mountnfs.sh             rcS                 umountnfs.sh
checkfs.sh           ifupdown-clean  mtab.sh                    reboot          umountroot
checkroot.sh       keymap.sh         mysql                        rmnologin       urandom
console-screen.sh      killprocs      mysql-ndb                 sendsigs      vmware-tools
cron                    klogd                  mysql-ndb-mgm        single               x11-common
dbus                   libdevmapper1.02       networking       ssh
dirmngr               makedev             nfs-common              stop-bootlogd

debian:/home/parco/test/socket# /etc/init.d/openbsd-inetd restart
Restarting internet superserver: inetdstart-stop-daemon: warning: failed to kill 5584: No such process

但是仍然沒有解決問題。。。。。。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2010-02-15 22:21 |只看該作者
謝謝langue斑竹的回復(fù)。。。。
daytime TCP服務(wù)是可以的,驗(yàn)證的步驟是:

(1) 在/etc/inetd.conf中加入daytime TCP服務(wù)
daytime     stream  tcp nowait  root    internal

(2) killall -HUP inetd

(3) ./getdate 后成功提示
daytime port is 13
read 26 bytes: Mon Feb 15 20:16:58 2010

(4.1) 注釋掉下面這一行
#daytime     stream  tcp nowait  root    internal

(4.2) killall -HUP inetd

(4.3) ./getdate 后提示
daytime port is 13
oops: getdate: Connection refused

這就說明配置文件里加上的daytime TCP服務(wù)起作用了,是吧?

(5) 在/etc/inetd.conf中加入daytime UDP服務(wù)
daytime     dgram   udp wait    root    internal

(6) killall -HUP inetd

(7) ./getdate_udp后程序掛起
daytime port is 13

為啥UDP就不行呢????
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP