Socket Programming Socket Programming l TCPIP l TCPIP
- Slides: 24
Socket Programming
Socket Programming l. TCP/IP 簡介 l. TCP/IP模組架構 l. Socket介紹 l. Socket分類 l. Client/Server model(主從式架構模型) l相關函式 l. TCP Socket程式設計 l. UDP Socket程式設計 l. Socket Read/Write Inside Out l. Performance Matters: Interrupt and Memory Copy at Socket l. Open Source Implementation: Linux Socket Filter
相關函式socket() NAME socket() - create an endpoint for communication SYNOPSIS #include <sys/types. h> #include <sys/socket. h> int socket(int domain, int type, int protocol); 1. 由server和client使用 2. domain: 設AF_INET 3. type: SOCK_STREAM或SOCK_DGRAM 4. protocol: 0 (讓socket()根據type自動設定)。 5. 成功傳回socket descriptor,失敗傳回-1 (並使用errno的macro)
相關函式bind() NAME bind() - bind a name to a socket SYNOPSIS #include <sys/types. h> #include <sys/socket. h> int bind(int sockfd, struct sockaddr *my_addr, int addrlen); 1. 由server使用 2. sockfd為socket()的回傳值。 3. myaddr 須指定port和ip後傳入,注意是用struct sockaddr_in宣告 ,傳入時轉為struct sockaddr。 4. addrlen直接用 sizeof(struct sockaddr) 5. bind就是將local的endpoint attach到一個socket
相關函式connect() NAME connect() - initiate a connection on a socket. SYNOPSIS #include <sys/types. h> #include <sys/socket. h> int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); 1. connect()由client呼叫 2. sockfd由socket()產生,serv_addr指定server的ip和port後傳入 3. addrlen直接用 sizeof(struct sockaddr)
相關函式listen() NAME listen() - listen for connections on a socket SYNOPSIS #include <sys/socket. h> int listen(int sockfd, int backlog); 1. 由server使用 2. sockfd由socket()產生,backlog設定可queue住的connection數量 (等待accept())。 3. 失敗傳回-1
相關函式accept() NAME accept() - accept a connection on a socket SYNOPSIS #include <sys/types. h> #include <sys/socket. h> int accept(int sockfd, struct sockaddr *addr, int *addrlen); 1. sockfd: listen()所使用的那個sockfd 2. addr 宣告完就拿來用,將存放client的資訊 3. addrlen直接用 sizeof(struct sockaddr) 4. 失敗傳回-1 5. server listen()完後開始等待accept()。 accept()傳回一個file descriptor以供此connection的I/O之用。 accpet完之後,server繼續使用listen()的fd等待下一個connection。
相關函式sendto() int sendto(int sockfd, const void *msg , int len, int flags); 1. sockfd可以是listen()的fd或是accpet的fd。 2. msg就是data,len就是data 的length (sizeof(msg)) ,flag就設 0。 3. 回傳值為送出去的大小 4. 失敗傳回-1
相關函式recvfrom() 1. The recvfrom() call is similar in many respects: int recvfrom(int sockfd, void *buf , int len, unsigned int flags); 1. sockfd: 要從哪個fd接收。 2. 回傳值為收到的大小。若回傳 0,表示對方把connection切了。
相關函式write() NAME write() - write to a file descriptor SYNOPSIS #include <unistd. h> ssize_t write(int fd, const void *buf, size_t count); 1. 可寫到file,device或socket
相關函式read() NAME read() - read from a file descriptor SYNOPSIS #include <unistd. h> ssize_t read(int fd, void *buf, size_t count); 1. 從file,device或socket讀取 2. 沒有data則read會block 3. count指定要讀的長度,如果沒有那麼多,則return,不會block
相關函式close() NAME read() - read from a file descriptor SYNOPSIS #include <unistd. h> int clode(int sockfd); 1. 呼叫close() 若成功:傳回 0 失敗:傳回-1
TCP Socket程式設計
UDP Socket程式設計
Socket Read/Write Inside out User Space Server socket creation socket() bind() listen() send data accept() sys_socketcall sys_socket sys_bind sys_listen sock_create inet_bind inet_listen inet_create write() sys_write sys_accept do_sock_wri te inet_accept sock_ sendmsg tcp_accept wait_for_ connection inet_ sendmsg tcp_ write_xmit Kernel Space Internet Client socket creation socket() connect() sys_socketcall send data read() sys_read sys_socket sys_connect do_sock_read sock_create inet_stream _connect sock_ recvmsg tcp_v 4_ getport sock_commo n_ recvmsg inet_create tcp_v 4_ connect inet_wait _connect tcp_ recvmsg memcpy_ toiovec
Socket Read/Write Inside out
Performance Matters: Interrupt and Memory Copy at Socket Latency in receiving TCP segments in the TCP layer Latency in transmitting TCP segments in the TCP layer
Open Source Implementation: Linux Socket Filter (net/core/filter. c) ◦ Similar to BPF (Berkley Packet FIilter) network monitor rarpd buffer filter user kernel protocol stack BPF link-level driver kernel network
- Tcp
- Tcpip
- Tcp/ip logo
- Modelo tcpip
- Ganesh sittampalam
- Iso/osi vs. tcp/ip
- Tcpip model
- Osi model history
- Bind function in socket programming
- Programming
- Udp broadcast socket programming in c
- Application
- Bzero function in socket programming
- Client in programming
- R socket programming
- Bsd socket programming
- Perbedaan linear programming dan integer programming
- Perbedaan linear programming dan integer programming
- Greedy vs dynamic programming
- What is system program
- Linear vs integer programming
- Tom chothia
- Socket in networking
- Welcome socket
- Secure socket layer and transport layer security