Linux sockets: Difference between revisions
Jump to navigation
Jump to search
Use
Line 4: | Line 4: | ||
* [https://www.thegeekstuff.com/2011/12/c-socket-programming/ C Socket Programming for Linux with a Server and Client Example Code] |
* [https://www.thegeekstuff.com/2011/12/c-socket-programming/ C Socket Programming for Linux with a Server and Client Example Code] |
||
: Simple example of client and server code using Linux sockets. |
: Simple example of client and server code using Linux sockets. |
||
== References == |
|||
* [https://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they mean the same across all major operating systems?] |
|||
: A '''very''' detailed answer about the differences between <code>SO_REUSEADDR</code> and <code>SO_REUSEPORT</code>. |
|||
* [https://www.freesoft.org/CIE/Course/index.htm Programmed Instruction Course] |
|||
: A course on internet technologies, including Domain Naming (DNS...), the IP protocol, the TCP protocol, ... |
|||
== Troubleshooting == |
== Troubleshooting == |
Revision as of 11:19, 17 September 2018
Tutorials
- A thoough step-by-step example of client and socket code.
- Simple example of client and server code using Linux sockets.
References
- A very detailed answer about the differences between
SO_REUSEADDR
andSO_REUSEPORT
.
- A course on internet technologies, including Domain Naming (DNS...), the IP protocol, the TCP protocol, ...
Troubleshooting
Use errno / strerror to get error
if( bind(socket_desc,(struct sockaddr *)&server , sizeof(server)) < 0)
{
printf("bind failed: %s (errno %d)", strerror(errno), errno);
return 1;
}
Use netstat
to get socket status
./server
# bind done
# Waiting for incoming connections...
# Connection accepted
# Handler assigned
# ^C
./server
# bind failed: Address already in use (errno 98)
netstat -a | grep 8888
# tcp 0 0 zavcxl0005:58888 165.225.76.32:http ESTABLISHED
# tcp 0 0 zavcxl0005:48888 10.75.126.1:https ESTABLISHED
# tcp 0 0 localhost.localdom:8888 localhost.localdo:50310 TIME_WAIT
# ... So port is still in use