Contents
プロセス間通信ではない。sockpair(2) を始めて使ったのでメモ。 select で寝たスレッドを起こすのに使える。:
#include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> int main() { int error; int sv[2]; char * msg = "Hello, world!!"; char buf[128]; if ((error = socketpair(AF_LOCAL, SOCK_STREAM, 0, sv)) < 0) { perror("socketpair"); exit(1); } if ((error = write(sv[0], msg, strlen(msg) + 1)) < 0) { perror("write"); exit(1); } if ((error = read(sv[1], buf, sizeof(buf))) < 0) { perror("read"); exit(1); } printf("%s\n", buf); }
ネットワークでお仕事しながら、いっつも忘れるこのはなし。 "1" は、:
Byte 1 Byte 2 Byte 3 Byte 4 -------------------------------------------------- Little Endian: 00000001 00000000 00000000 00000000 Big Endian: 00000000 00000000 00000000 00000001 --------------------------------------------------
これは Big Endian。以下は TCP のヘッダ。Sequence Number が 1 の ときには、:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
となるので忘れないように。メモメモ。