FILEを使用してUDPからデータを読み取ることができる素敵な抽象化が見つかりました。これはデータの読み込みには効果的ですが、UDP経由でデータを吐き出すためにはうまく動作しません。ここではファイルストリーム上のUDPデータを読み込むためのコードは次のとおりです。CでFILEストリームを使用してソケットに読み書きする
u_int8 *buf;
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in serverAddr;
if (sockfd < 0) {
printf("Could not open socket\n");
exit(1);
}
buf = malloc(BUF_SIZE * sizeof(u_int8));
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
serverAddr.sin_port = htons(port);
int rc = bind(sockfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr));
if (rc<0) {
printf("Could not bind to port %d\n", port);
exit(1);
}
/* Make sockfd blocking */
int flags = fcntl(sockfd, F_GETFL, 0);
fcntl(sockfd, F_SETFL, flags & ~O_NONBLOCK);
FILE *sockfile;
sockfile = (FILE*)fdopen(sockfd, "r");
現在、いくつかの他のコードを呼び出すことができます。
fread(data, sizeof(u_int8), frame_payload_size, sockfile);
をこれが正常に動作します。他のいくつかのコードが呼び出されます
u_int8 *buf;
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in clientAddr;
if (sockfd < 0) {
printf("Could not open socket\n");
exit(1);
}
memset((char *)&clientAddr, 0, sizeof(clientAddr));
buf = malloc(BUF_SIZE * sizeof(u_int8));
clientAddr.sin_family = AF_INET;
clientAddr.sin_port = htons(port);
if (inet_aton("127.0.0.1", &clientAddr.sin_addr)==0) {
printf("inet_aton()\n");
abort();
}
int rc = bind(sockfd, (struct sockaddr *)&clientAddr, sizeof(clientAddr));
FILE *sockfile;
sockfile = (FILE*)fdopen(sockfd, "w");
:
written = fwrite(fm->frame, sizeof(u_int8), fm->frame_length, data_out_stream);
「を書かれた」書かれた要素の正の数を返す、まだUDPパケットが生成されるように見えるんだろうしかし、その逆はしていないようです。
私は何をしようとしていますか?なぜそれが動作していないかもしれないかについての示唆はありますか?