cmn-clib(CommonLibraryForC)
C言語共通ライブラリ
 全て データ構造 ファイル 関数 変数 型定義 列挙型 列挙値 マクロ定義
CmnNetSocket.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ソケット関連機能

著者
H.Kumagai

関数詳解

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を指定する。
responseEndMarkLenendMarkのバイト数
optソケットオプション(CNS_OPT_XXX を論理和で指定する)
戻り値
ステータス
CmnNetSocketStatus CmnNetSocket_ReceiveAll ( CmnNetSocket socket,
CmnDataBuffer buf,
const char *  endMark,
const int  endMarkLen 
)

ソケットからすべてのデータを読み込む

受信データにendMarkが現れる、もしくは相手が送信終了(FIN送信、graceful close)するまでブロックして受信データを全て読み込む。

引数
socketSocket
buf受信したデータを格納するバッファ。endMarkも含めて全ての受信データを格納する。
endMark受信データの終わりを示すバイト列。相手の送信終了(graceful close)まで無制限に読み込み続ける場合はNULLを指定する。
endMarkLenendMarkのバイト数
戻り値
ステータス
CmnNetSocketStatus CmnNetSocket_SendAll ( CmnNetSocket socket,
const void *  data,
int  len 
)

ソケットへすべてのデータを書き込む

引数
socketSocket
data送信するデータ
lendataのバイト数
戻り値
ステータス
CmnNetSocketStatus CmnNetSocket_StartServer ( unsigned short  port,
void(*)(CmnNetSocket *)  serverMainProc,
CmnNetSocketServer server 
)

TCP/IP待ち受けサーバー起動

portにLISTENするサーバー処理を別スレッドで開始する。
待ち受け開始後、portにアクセスがあればmethodを新規スレッドでコールする。 待ち受けを終了する場合はCmnNetSocket_EndServerをコールすること。 待ち受けスレッドはserver->acceptThreadに格納される。

引数
port通信を待ち受けるポート
serverMainProcportにアクセスがあった場合に呼び出す処理
serverサーバー起動に成功した場合にサーバー情報を設定する。呼び出し側での初期化は不要。
戻り値
処理結果ステータス
CmnNetSocketStatus CmnNetSocket_ToSocketAddress ( const char *  host,
unsigned short  port,
struct sockaddr_in *  addr 
)

IPアドレスやホスト名文字列とポート番号からsockaddr_inを設定する

引数
hostIPアドレスまたはホスト名の文字列
portポート番号
addr変換したIPアドレス情報を格納する
戻り値
ステータス(正常時:CNS_SUCCESS、変換エラー:CNS_ADDRESS_ERROR)