|
cmn-clib(CommonLibraryForC)
C言語共通ライブラリ
|
ネットワークライブラリ TCP/IPソケット関連機能 [詳解]
#include "cmnclib/CmnNet.h"#include "cmnclib/CmnData.h"#include "cmnclib/CmnThread.h"#include "cmnclib/CmnLog.h"#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>データ構造 | |
| struct | tag_RunServerMainProcParam |
マクロ定義 | |
| #define | CmnNetSocket_isSocketError(x) (x < 0) |
| #define | CMNNETSOCKET_RECEIVE_BUFFER_SIZE 4096 |
| #define | CMNNETSOCKET_ACCEPT_TIMEOUT_SEC 1 |
型定義 | |
| typedef struct tag_RunServerMainProcParam | RunServerMainProcParam |
関数 | |
| CmnNetSocketStatus | CmnNetSocket_StartServer (unsigned short port, void(*serverMainProc)(CmnNetSocket *), CmnNetSocketServer *server) |
| TCP/IP待ち受けサーバー起動 [詳解] | |
| CmnNetSocketStatus | CmnNetSocket_EndServer (CmnNetSocketServer *server) |
| サーバーを終了する [詳解] | |
| CmnNetSocketStatus | CmnNetSocket_NoSessionRequest (const char *host, unsigned short port, CmnDataBuffer *request, CmnDataBuffer *response, const char *responseEndMark, const int responseEndMarkLen, int opt) |
| セッションレスTCP/IPリクエスト送信 [詳解] | |
| CmnNetSocketStatus | CmnNetSocket_ReceiveAll (CmnNetSocket *socket, CmnDataBuffer *buf, const char *endMark, const int endMarkLen) |
| ソケットからすべてのデータを読み込む [詳解] | |
| CmnNetSocketStatus | CmnNetSocket_SendAll (CmnNetSocket *socket, const void *data, int len) |
| ソケットへすべてのデータを書き込む [詳解] | |
| CmnNetSocketStatus | CmnNetSocket_ToSocketAddress (const char *host, unsigned short port, struct sockaddr_in *addr) |
| IPアドレスやホスト名文字列とポート番号からsockaddr_inを設定する [詳解] | |
ネットワークライブラリ TCP/IPソケット関連機能
| CmnNetSocketStatus CmnNetSocket_EndServer | ( | CmnNetSocketServer * | server | ) |
サーバーを終了する
| server | サーバーオブジェクト |
| CmnNetSocketStatus CmnNetSocket_NoSessionRequest | ( | const char * | host, |
| unsigned short | port, | ||
| CmnDataBuffer * | request, | ||
| CmnDataBuffer * | response, | ||
| const char * | responseEndMark, | ||
| const int | responseEndMarkLen, | ||
| int | opt | ||
| ) |
セッションレスTCP/IPリクエスト送信
セッションがなく、1回のRequest→Responseで完結するTCP/IPリクエストを送信する。
| ip | リモートホストのアドレス(IPアドレスまたはホスト名) |
| port | リモートホストのポート |
| request | リクエストデータ |
| response | レスポンスデータを格納するバッファ |
| responseEndMark | 受信データの終わりを示すバイト列。相手の送信終了(graceful close)まで無制限に読み込み続ける場合はNULLを指定する。 |
| responseEndMarkLen | endMarkのバイト数 |
| opt | ソケットオプション(CNS_OPT_XXX を論理和で指定する) |
| CmnNetSocketStatus CmnNetSocket_ReceiveAll | ( | CmnNetSocket * | socket, |
| CmnDataBuffer * | buf, | ||
| const char * | endMark, | ||
| const int | endMarkLen | ||
| ) |
ソケットからすべてのデータを読み込む
受信データにendMarkが現れる、もしくは相手が送信終了(FIN送信、graceful close)するまでブロックして受信データを全て読み込む。
| socket | Socket |
| buf | 受信したデータを格納するバッファ。endMarkも含めて全ての受信データを格納する。 |
| endMark | 受信データの終わりを示すバイト列。相手の送信終了(graceful close)まで無制限に読み込み続ける場合はNULLを指定する。 |
| endMarkLen | endMarkのバイト数 |
| CmnNetSocketStatus CmnNetSocket_SendAll | ( | CmnNetSocket * | socket, |
| const void * | data, | ||
| int | len | ||
| ) |
ソケットへすべてのデータを書き込む
| socket | Socket |
| data | 送信するデータ |
| len | dataのバイト数 |
| CmnNetSocketStatus CmnNetSocket_StartServer | ( | unsigned short | port, |
| void(*)(CmnNetSocket *) | serverMainProc, | ||
| CmnNetSocketServer * | server | ||
| ) |
TCP/IP待ち受けサーバー起動
portにLISTENするサーバー処理を別スレッドで開始する。
待ち受け開始後、portにアクセスがあればmethodを新規スレッドでコールする。 待ち受けを終了する場合はCmnNetSocket_EndServerをコールすること。 待ち受けスレッドはserver->acceptThreadに格納される。
| port | 通信を待ち受けるポート |
| serverMainProc | portにアクセスがあった場合に呼び出す処理 |
| server | サーバー起動に成功した場合にサーバー情報を設定する。呼び出し側での初期化は不要。 |
| CmnNetSocketStatus CmnNetSocket_ToSocketAddress | ( | const char * | host, |
| unsigned short | port, | ||
| struct sockaddr_in * | addr | ||
| ) |
IPアドレスやホスト名文字列とポート番号からsockaddr_inを設定する
| host | IPアドレスまたはホスト名の文字列 |
| port | ポート番号 |
| addr | 変換したIPアドレス情報を格納する |