- 論壇徽章:
- 0
|
我在《perl實例精解》第四版中看到說,socket有有幾種類型,比如AF_UNIX, AF_INET, 還有個我忘了
如果創(chuàng)建的是AF_UNIX類型的socket,可以用bind綁定到文件,比如
bind(SERVERSOCKET, "./mysocket");
但是我運行腳本的時候總是提示bind參數(shù)無效 Invalid argument。我查看perldoc -f bind函數(shù)原型也說
bind的第二個參數(shù)應(yīng)該是pack之后的地址。
請問bind對于本地進程通信可以綁定到本地文件嗎?如果可以的話,怎么綁定呢?
以下是我用的腳本,提示invalid argument.- #!/usr/bin/perl
- print "Server started.\n";
- use constant {
- AF_UNIX => 1,
- SOCKET_STREAM => 1,
- };
- print AF_UNIX, "\n";
- $protocol = 0; # aka ip
- socket(SERVERSOCKET, AF_UNIX, SOCKET_STREAM, $protocol) ||
- die("can't create socket $!\n");
- print "socket OK.\n";
- $name = "./mysocket";
- unlink $name if -e $name;
- bind(SERVERSOCKET, $name) || die("can't bind socket to $name $!\n");
- print "bind OK.\n";
- listen(SERVERSOCKET, 5) || die("error Listen $!\n");
- print "listen OK.\n";
- while (1) {
- accept(NEWSOCKET, SERVERSOCKET) or die("error Accept $!\n");
- print "Accept OK. \n";
- $pid = fork || die("Fork error: $!\n");
- if ($pid == 0) {
- print NEWSOCKET "Greetings from your server";
- close(NEWSOCKET);
- exit(0);
- }
- else {
- close(NEWSOCKET);
- }
- }
復(fù)制代碼 |
|