ft_irc
8028 ワード
IRC
コンセント
プロセスは、データをネットワーク世界にエクスポートまたは受信する実際のウィンドウです.
プロセスは、データを送信または受信するために、ソケットを開き、ソケットにデータを書き込みおよび読み取ります.
ソケットは、プロトコル、IP、およびポート番号として定義されます.
-プロトコル:あるシステムが別のシステムとシームレスに通信できるようにする通信プロトコル.
役割に応じてサーバソケットとクライアントソケットに分割
ポート
バインドポート
sockaddr
struct sockaddr {
ushort sa_family;
char sa_data[14];
};
struct sockaddr_in {
short sin_family; //주소 체계를 저장하는 필드
u_short sin_port; //포트 정보 저장
struct in_addr sin_addr; //IPv4주소를 저장. 타입 in_addr구조체
char sin_zero[8]; //사용하지 않는 필드. 0으로 채워줘야 함.
};
htons()
bind()
Listen()
kqueue()
kevent 61 s構造体
struct kevent64_s
{
uint64_t ident; /* 이벤트 식별자 (identifier for this event) */
int16_t filter; /* 이벤트 필터 (filter for event) */
uint16_t flags; /* 일반 플래그 (general flags) */
uint32_t fflags; /* 필터 플래그 (filter-specific flags) */
int64_t data; /* 필터 데이터 (filter-specific data) */
uint64_t udata; /* 사용자 데이터 (opaque user data identifier) */
uint64_t ext[2]; /* 필터 확장 (filter-specific extensions) */
};
3 .flagsイベントで実行される操作.
+7.ext[2]このフィールドは、イベントフィルタの拡張子を保存します.展開タイプは、使用するフィルタによって異なります.
kevent64()
EV_SET64()
recv()
int send(int socket, const void *msg, size_t len, int flags);
int recv(int socket, void *buf, size_t len, int flags);
accept()
SOCKET hClient = accept(hListen, (SOCKADDR*)&tClntAddr, &iClntSize);
accept(ソケット、ソケットコンポーネントアドレス体のアドレス、その構造体サイズの変数を含むアドレス);
accept関数を使用して接続要求を受け入れます.アクションは同期して実行されます(リクエストが完了するまで待機します=リクエストが入るまでこの関数は終了しません).
接続リクエストが承認されると、接続のソケットが作成され、返されます.このようにして作られたコンセントを利用して通信する.
最初のパラメータはコンセントに入れることです.
2番目のパラメータは、受信するクライアントアドレス情報構造体のアドレスである.(SOCKA DDR*タイプ変換)
3番目のパラメータは、2番目のパラメータである構造体サイズの変数を格納するアドレスを含む.
ソース
リンクテキスト
リンクテキスト
Reference
この問題について(ft_irc), 我々は、より多くの情報をここで見つけました https://velog.io/@songtofu/ftircテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol