當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Ruby Socket.bind用法及代碼示例


本文簡要介紹ruby語言中 Socket.bind 的用法。

用法

bind(local_sockaddr) → 0

綁定到給定的本地地址。

參數

  • local_sockaddr - 包含在字符串或 Addrinfo 對象中的 struct sockaddr

示例

require 'socket'

# use Addrinfo
socket = Socket.new(:INET, :STREAM, 0)
socket.bind(Addrinfo.tcp("127.0.0.1", 2222))
p socket.local_address #=> #<Addrinfo: 127.0.0.1:2222 TCP>

# use struct sockaddr
include Socket::Constants
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
sockaddr = Socket.pack_sockaddr_in( 2200, 'localhost' )
socket.bind( sockaddr )

基於 Unix 的異常

在基於 unix 的係統上,如果對 bind 的調用失敗,可能會引發以下係統異常:

  • Errno::EACCES - 指定的sockaddr 受保護,當前用戶無權綁定到它

  • Errno::EADDRINUSE - 指定的sockaddr 已在使用中

  • Errno::EADDRNOTAVAIL - 指定的sockaddr 在本地機器上不可用

  • Errno::EAFNOSUPPORT - 指定的 sockaddr 不是調用 socket 的係列的有效地址

  • Errno::EBADF - 指定的 sockaddr 不是有效的文件說明符

  • Errno::EFAULT - 無法訪問 sockaddr 參數

  • Errno::EINVAL - socket 已綁定到地址,並且協議不支持綁定到新的 sockaddrsocket 已關閉。

  • Errno::EINVAL - 地址長度不是地址族的有效長度

  • Errno::ENAMETOOLONG - 解析的路徑名長度超過PATH_MAX

  • Errno::ENOBUFS - 沒有可用的緩衝區空間

  • Errno::ENOSR - 可用的 STREAMS 資源不足,無法完成操作

  • Errno::ENOTSOCK - socket 不引用套接字

  • Errno::EOPNOTSUPP - socket 的套接字類型不支持綁定到地址

在基於 unix 的係統上,如果調用 socket 的地址族是 Socket::AF_UNIX ,如果對 bind 的調用失敗,則可能會引發以下異常:

  • Errno::EACCES - 前綴路徑的組件的搜索權限被拒絕或對 socket 的寫訪問被拒絕

  • Errno::EDESTADDRREQ - sockaddr 參數是一個空指針

  • Errno::EISDIR - 與 Errno::EDESTADDRREQ 相同

  • Errno::EIO - 發生 i/o 錯誤

  • Errno::ELOOP - 翻譯 sockaddr 中的路徑名時遇到太多符號鏈接

  • Errno::ENAMETOOLLONG - 路徑名的一個組成部分超過了 NAME_MAX 個字符,或者整個路徑名超過了 PATH_MAX 個字符

  • Errno::ENOENT - 路徑名的組件沒有命名現有文件或路徑名是空字符串

  • Errno::ENOTDIR - sockaddr 中路徑名的路徑前綴的組件不是目錄

  • Errno::EROFS - 名稱將駐留在隻讀文件係統上

Windows 異常

在 Windows 係統上,如果對 bind 的調用失敗,可能會引發以下係統異常:

  • Errno::ENETDOWN - 網絡已關閉

  • Errno::EACCES - 嘗試將數據報套接字連接到廣播地址失敗

  • Errno::EADDRINUSE - 套接字的本地地址已被使用

  • Errno::EADDRNOTAVAIL - 指定的地址不是此計算機的有效地址

  • Errno::EFAULT - 套接字的內部地址或地址長度參數太小或不是用戶空間尋址的有效部分

  • Errno::EINVAL - socket 已經綁定到一個地址

  • Errno::ENOBUFS - 沒有可用的緩衝區空間

  • Errno::ENOTSOCK - socket 參數不引用套接字

參看

  • 在基於 Unix 的係統上綁定手冊頁

  • Microsoft 的 Winsock 函數參考中的綁定函數

相關用法


注:本文由純淨天空篩選整理自ruby-lang.org大神的英文原創作品 Socket.bind。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。