Hi,
i have udp chat in C, but on terminal is written: Bind error : Permission denied, I tried a lot of different ports but nothing is working. What can be a problem?
What I have tried:
<pre> sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
if(sock_fd == -1){
perror("Socket error ");
return 1;
}
if (argc < 4) {
printf("%s <local port> <remote host> <remote port>\n", argv[0]);
return 1;
}
peer_addr.sin_family = AF_INET;
peer_addr.sin_port = htons(remote_port);
if (inet_aton(argv[2], &peer_addr.sin_addr) == 0) {
printf("Error");
return 1;
}
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(local_port);
int local_bind = bind(sock_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr));
if(local_bind == -1){
perror("Bind error ");
return 1;
}
chat(sock_fd, &peer_addr);
close(sock_fd);
return 0;
}
<pre>void chat(int sock_fd, struct sockaddr_in *peer){
struct timeval tv;
ssize_t bytes;
char inp_buffer[1024];
char out_buffer[1024];
fd_set readfds;
while(1){
FD_ZERO(&readfds);
FD_SET(STDIN, &readfds);
FD_SET(sock_fd, &readfds);
tv.tv_sec = 5;
tv.tv_usec = 0;
select(sock_fd + 1, &readfds, NULL, NULL, &tv);
if (FD_ISSET(STDIN, &readfds)){
bytes = read(0, out_buffer, sizeof(out_buffer));
if (bytes < 0) {
printf("Error\n");
break;
}
printf("Sending: %.*s\n", (int)bytes, out_buffer);
bytes = sendto(sock_fd, out_buffer, bytes, 0,(struct sockaddr *)peer, sizeof(struct sockaddr_in));
if (bytes < 0) {
printf("Error \n");
break;
}
}
if(FD_ISSET(sock_fd, &readfds)){
bytes = recvfrom(sock_fd, inp_buffer, sizeof(inp_buffer),0, NULL, NULL);
if (bytes < 0) {
printf("Error recvfrom\n");
break;
}
if (bytes > 0) {
printf("Received: %.*s\n", (int)bytes, inp_buffer);
}
if(!strcmp(inp_buffer,"Exit\n")){
printf("Received Exit => closing\n");
break;
}
}
}
}