程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話中期待socket銜接和對socket定位的辦法

C說話中期待socket銜接和對socket定位的辦法

編輯:關於C++

C說話中期待socket銜接和對socket定位的辦法。本站提示廣大學習愛好者:(C說話中期待socket銜接和對socket定位的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中期待socket銜接和對socket定位的辦法正文


C說話listen()函數:期待銜接
頭文件:

#include <sys/socket.h>

界說函數:

int listen(int s, int backlog);

函數解釋:listen()用來期待參數s 的socket 連線. 參數backlog 指定同時能處置的最年夜銜接請求, 假如銜接數量達此下限則client 端將收到ECONNREFUSED 的毛病. Listen()並未開端吸收連線, 只是設置socket 為listen 形式, 真正吸收client 端連線的是accept(). 平日listen()會在socket(), bind()以後挪用, 接著才挪用accept().

前往值:勝利則前往0, 掉敗前往-1, 毛病緣由存於errno

附加解釋:listen()只實用SOCK_STREAM 或SOCK_SEQPACKET 的socket 類型. 假如socket 為AF_INET 則參數backlog 最年夜值可設至128.

毛病代碼:
   EBADF 參數sockfd 非正當socket 處置代碼
   EACCESS 權限缺乏
   EOPNOTSUPP 指定的socket 並未增援listen 形式.

C說話bind()函數:對socket定位
頭文件:

#include <sys/types.h>  #include <sys/socket.h>

界說函數:int bind(int sockfd, struct sockaddr * my_addr, int addrlen);

函數解釋:bind()用來設置給參數sockfd 的socket 一個稱號. 此稱號由參數my_addr 指向一sockaddr 構造,關於分歧的socket domain 界說了一個通用的數據構造

struct sockaddr
{
  unsigned short int sa_family;
  char sa_data[14];
};

1、sa_family 為挪用socket()時的domain 參數, 即AF_xxxx 值.
2、sa_data 最多應用14 個字符長度.

此sockaddr 構造會因應用分歧的socket domain 而有分歧構造界說, 例如應用AF_INET domain,其socketaddr 構造界說便為

struct socketaddr_in
{
  unsigned short int sin_family;
  uint16_t sin_port;
  struct in_addr sin_addr;
  unsigned char sin_zero[8];
};

struct in_addr
{
  uint32_t s_addr;
};

1、sin_family 即為sa_family
2、sin_port 為應用的port 編號
3、sin_addr. s_addr 為IP 地址 sin_zero 未應用.
參數 addrlen 為sockaddr 的構造長度.

前往值:勝利則前往0, 掉敗前往-1, 毛病緣由存於errno 中.

毛病代碼:
1、EBADF 參數sockfd 非正當socket 處置代碼.
2、EACCESS 權限缺乏
3、ENOTSOCK 參數sockfd 為一文件描寫詞, 非socket.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved