隨筆-124  評論-194  文章-0  trackbacks-0

          今天在WINDOWS下用SOCKET時發現如下錯誤:(LINUX下正常)

          Your vendor has not defined Fcntl macro F_GETFL, used at :/Perl/site/lib/IO/Multiplex.pm line 932.

           

          只需要替換Multiplex.pm line 932處函數nonblock:

          sub nonblock
          {
          my $fh = shift;
          my $flags = fcntl($fh, F_GETFL, 0)
          or die "fcntl F_GETFL: $!\n"
          fcntl($fh, F_SETFL, $flags | O_NONBLOCK)
          or die "fcntl F_SETFL $!\n"
          }

          替換為:

          use constant WIN32 => $^O =~ /win32/i;

          sub nonblock {
          my $sock = shift;
          if (WIN32) {
          my $set_it = "1"
          ioctl( $sock, 0x80000000 | (4 << 16) | (ord('f') << 8) | 126, $set_it) || return 0;
          } else {
          fcntl($sock, F_SETFL, fcntl($sock, F_GETFL, 0) | O_NONBLOCK) || return 0;
          }
          }

          即可。

          posted on 2007-10-31 20:40 我愛佳娃 閱讀(1189) 評論(0)  編輯  收藏 所屬分類: Perl
          主站蜘蛛池模板: 洪泽县| 石泉县| 陆川县| 航空| 德保县| 绍兴县| 玉田县| 南澳县| 久治县| 正宁县| 内黄县| 金阳县| 彭阳县| 宝坻区| 鹤岗市| 蛟河市| 安平县| 和林格尔县| 南溪县| 贡觉县| 太白县| 大渡口区| 岑溪市| 保康县| 永定县| 清水河县| 德江县| 霍邱县| 腾冲县| 安宁市| 忻州市| 巴中市| 兴隆县| 郯城县| 香河县| 吕梁市| 铁力市| 黄石市| 达州市| 巴彦淖尔市| 沂南县|