隨筆-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
          主站蜘蛛池模板: 东港市| 金华市| 阳新县| 福贡县| 武鸣县| 闵行区| 遂宁市| 望江县| 时尚| 灌阳县| 敦煌市| 宁国市| 北安市| 如皋市| 乌拉特后旗| 英德市| 崇州市| 崇阳县| 宜黄县| 应用必备| 曲沃县| 保定市| 栾城县| 湘西| 沐川县| 固安县| 惠来县| 台北市| 玉树县| 泗阳县| 大荔县| 长岭县| 筠连县| 新平| 会昌县| 防城港市| 丘北县| 克东县| 壶关县| 奎屯市| 沽源县|