我在使用writev()/ readv()進行客戶端 - 服務器通信時遇到問題。從readv讀取數據
我有兩個結構,header
和data
定義如下:
typedef struct {
int op;
int key;
} message_hdr_t;
typedef struct {
int len;
char *data;
} message_data_t;
服務器並(在短):
message_hdr_t h = {1, 11};
message_data_t d;
d.len = 3;
strcpy(d.data, "msg");
struct iovec tosend[2];
tosend[0].iov_base = &h;
tosend[0].iov_len = sizeof(message_hdr_t);
tosend[1].iov_base = &d;
tosend[1].iov_len = sizeof(message_data_t);
writev(socket, tosend, 2);
close(socket);
客戶端(在短):
struct iovec received[2];
readv(socket, received, 2);
message_hdr_t header;
header.op = ((message_hdr_t *) received[0].iov_base)->op;
header.key = ((message_hdr_t *) received[0].iov_base)->key;
printf("Received op: %i, key: %i\n",header.op,header.key;
close(socket);
但客戶端得到段錯誤,因爲received[0].iov_base
是NULL
。爲什麼? 套接字已正確打開並且客戶端已正確連接到服務器。這是一個AF_UNIX插座。
什麼是'struct iovec'? – alk
@alk這是一個標準的POSIX結構。 –