why don't I see the server running in netstat / ifconfig?

bash, c, macos, sockets

Solution

If port 8888 is listed in your `/etc/services` file, then `netstat` will substitute the port number by the name given there. This is why `grep` doesn't find it. You can turn this off with the `-n` flag:

$ netstat -a
...
tcp        0      0 *:ssh                   *:*                     LISTEN     
...
$ netstat -an
...
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
...

I generally use `netstat -lpn -t tcp` to show only listening TCP sockets; then the list is usually short enough to grep using my eyes. The `-p` flag shows which program is listening, which is often helpful.

Problem

I have this code for server code in c, under unix: ``` /* A simple server in the internet domain using TCP The port number is passed as an argument */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> void error(const char *msg) { perror(msg); exit(1); } int main(int argc, char *argv[]) { int sockfd, newsockfd, portno; socklen_t clilen; char buffer[256]; struct sockaddr_in serv_addr, cli_addr; int n; if (argc < 2) { fprintf(stderr,"ERROR, no port provided\n"); exit(1); } sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) error("ERROR opening socket"); bzero((char *) &serv_addr, sizeof(serv_addr)); portno = atoi(argv[1]); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_port = htons(portno); if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) error("ERROR on binding"); listen(sockfd,5); clilen = sizeof(cli_addr); newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if (newsockfd < 0) error("ERROR on accept"); bzero(buffer,256); n = read(newsockfd,buffer,255); if (n < 0) error("ERROR reading from socket"); printf("Here is the message: %s\n",buffer); n = write(newsockfd,"I got your message",18); if (n < 0) error("ERROR writing to socket"); close(newsockfd); close(sockfd); return 0; } ``` I took this code from here. i run the code on port `8888` my question is why don't I see it when I run those command in the bash: ``` netstat -a | grep 8888 ``` or ``` ifconfig -a | grep 8888 ``` but if I do : ``` sudo cat /etc/services | grep 8888 ``` I can see it. Is there any other relevant shell command I can use to see it?

Original source