これは、スレッドごとに 1 つのクライアントを持つ tcp サーバー クライアント メッセージ サービスに含まれる .c ファイルの一部です。サーバースレッド内でselectを使用して、新しい着信接続またはバッファーに書き込まれるデータを処理したいのですが、問題は、クライアントとサーバーのそれを行うためにソケットファイル記述子が必要なことです。
コードのこの部分では、サーバーのソケット記述子は s->sd 内にありますが、(socket) を返すため、この関数の外でアクセスできるようです。
私に何ができる?(読みやすいようにコードの大部分は省略されています)
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
typedef struct {
int sd; //id of the socket??
char *ip_addr;
int port;
} MySocket;
Socket tcp_passive_open(int port)
{
MySocket *s = (MySocket *)malloc( sizeof(MySocket) );
struct sockaddr_in addr;
s->sd = socket(PROTOCOLFAMILY, TYPE, PROTOCOL);
memset(&addr, 0, sizeof(struct sockaddr_in));
addr.sin_family = PROTOCOLFAMILY;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(port);
if ( bind(s->sd, (struct sockaddr *)&addr, sizeof(addr)) != 0 ) {
die("tcp_open_server failed(): bind() failed");
}
s->port = port;
s->ip_addr = NULL; //INADDR_ANY ...
return (Socket)s;
}
主要:
Socket server = tcp_passive_open( PORT );
FD_SET(SOCKETDESCRIPTOR_SERVER??,&master_socketDescriptors);