- 论坛徽章:
- 0
|
我在《perl实例精解》第四版中看到说,socket有有几种类型,比如AF_UNIX, AF_INET, 还有个我忘了
如果创建的是AF_UNIX类型的socket,可以用bind绑定到文件,比如
bind(SERVERSOCKET, "./mysocket");
但是我运行脚本的时候总是提示bind参数无效 Invalid argument。我查看perldoc -f bind函数原型也说
bind的第二个参数应该是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);
- }
- }
复制代码 |
|