Błąd - Error accepting 24
-
- Sędziwy Jeż
- Posty: 30
- Rejestracja: 08 cze 2013, 09:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Architektura: x86
Błąd - Error accepting 24
Witam,
Mam komunikacje server-client w C++ i wszystko ładnie działa, aż po pewnym czasie używania przy próbie wysłania informacji wyskakuje komunikat w terminal'u "Error accepting 24".
Więc czy wiecie może jak temu zaradzić?
Mam komunikacje server-client w C++ i wszystko ładnie działa, aż po pewnym czasie używania przy próbie wysłania informacji wyskakuje komunikat w terminal'u "Error accepting 24".
Więc czy wiecie może jak temu zaradzić?
- ethanak
- Wygnańcy
- Posty: 3054
- Rejestracja: 04 gru 2007, 13:19
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.04
- Środowisko graficzne: GNOME
- Architektura: x86
- Lokalizacja: Bielsko-Biała
- Kontakt:
Re: Błąd - Error accepting 24
poprawić błąd w programie?
bo bez pokazania kodu lepszej odpowiedzi się nie spodziewaj.
-- 20 lip 2013 16:43 --
poprawić błąd w programie?
bo bez pokazania kodu lepszej odpowiedzi się nie spodziewaj.
bo bez pokazania kodu lepszej odpowiedzi się nie spodziewaj.
-- 20 lip 2013 16:43 --
poprawić błąd w programie?
bo bez pokazania kodu lepszej odpowiedzi się nie spodziewaj.
-
- Sędziwy Jeż
- Posty: 30
- Rejestracja: 08 cze 2013, 09:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Architektura: x86
Re: Błąd - Error accepting 24
Server
Client
Oryginał - https://github.com/iri/ercshell/tree/ma ... /LinSocket
Kod: Zaznacz cały
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <netinet/in.h>
#include <resolv.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <pthread.h>
void* SocketHandler(void*);
int main(int argv, char** argc){
system("fuser -k 1101/tcp");
int host_port= 1101;
struct sockaddr_in my_addr;
int hsock;
int * p_int ;
int err;
socklen_t addr_size = 0;
int* csock;
sockaddr_in sadr;
pthread_t thread_id=0;
hsock = socket(AF_INET, SOCK_STREAM, 0);
if(hsock == -1){
printf("Error initializing socket %d\n", errno);
goto FINISH;
}
p_int = (int*)malloc(sizeof(int));
*p_int = 1;
if( (setsockopt(hsock, SOL_SOCKET, SO_REUSEADDR, (char*)p_int, sizeof(int)) == -1 )||
(setsockopt(hsock, SOL_SOCKET, SO_KEEPALIVE, (char*)p_int, sizeof(int)) == -1 ) ){
printf("Error setting options %d\n", errno);
free(p_int);
goto FINISH;
}
free(p_int);
my_addr.sin_family = AF_INET ;
my_addr.sin_port = htons(host_port);
memset(&(my_addr.sin_zero), 0, 8);
my_addr.sin_addr.s_addr = INADDR_ANY ;
if( bind( hsock, (sockaddr*)&my_addr, sizeof(my_addr)) == -1 ){
fprintf(stderr,"Error binding to socket, make sure nothing else is listening on this port %d\n",errno);
goto FINISH;
}
if(listen( hsock, 10) == -1 ){
fprintf(stderr, "Error listening %d\n",errno);
goto FINISH;
}
//Now lets do the server stuff
addr_size = sizeof(sockaddr_in);
while(true){
printf("waiting for a connection\n");
csock = (int*)malloc(sizeof(int));
if((*csock = accept( hsock, (sockaddr*)&sadr, &addr_size))!= -1){
printf("---------------------\nReceived connection from %s\n",inet_ntoa(sadr.sin_addr));
pthread_create(&thread_id,0,&SocketHandler, (void*)csock );
pthread_detach(thread_id);
}
else{
fprintf(stderr, "Error accepting %d\n", errno);
}
}
FINISH:
;
}
void* SocketHandler(void* lp){
int *csock = (int*)lp;
char buffer[1024];
int buffer_len = 1024;
int bytecount;
memset(buffer, 0, buffer_len);
if((bytecount = recv(*csock, buffer, buffer_len, 0))== -1){
fprintf(stderr, "Error receiving data %d\n", errno);
goto FINISH;
}
printf("Received bytes %d\nReceived string \"%s\"\n", bytecount, buffer);
strcat(buffer, " SERVER ECHO");
if((bytecount = send(*csock, buffer, strlen(buffer), 0))== -1){
fprintf(stderr, "Error sending data %d\n", errno);
goto FINISH;
}
printf("Sent bytes %d\n", bytecount);
FINISH:
free(csock);
return 0;
}
Kod: Zaznacz cały
#include <iostream>
#include <cstdio>
#include <fstream>
#include <sstream>
#include <fcntl.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
#include <netinet/in.h>
#include <resolv.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
using namespace std;
void wysylanie(string komenda);
int main(int argv, char** argc)
{
string komenda="test";
while(true)
{
usleep(10*1000);
if(komenda!="0")
{
wysylanie(komenda);
}
}
return 0;
}
void wysylanie(string komenda)
{
string FileMeasure=komenda+" ";
int TempNumOne=FileMeasure.size();
char Filename[100];
for (int a=0;a<=TempNumOne;a++)
{
Filename[a]=FileMeasure[a];
}
ifstream configStrumien("config.txt");
if(configStrumien)
{
//cout << "Plik został odczytany!" << endl;
}
else
{
cout << "BŁĄD: nie można otworzyć pliku konfiguracji do odczytu." << endl;
cout<<"Naciśnij ENTER aby wyjść!"<<endl;
cin.get();
exit(1);
}
int port;
string name;
string linia;
getline(configStrumien, linia);
//cout<< linia << endl;
istringstream iss(linia);
iss >> port;
getline(configStrumien, linia);
//cout<< linia << endl;
name = linia;
int host_port= port;
const char* host_name=name.c_str();
struct sockaddr_in my_addr;
char buffer[1024];
int bytecount;
int buffer_len=0;
int hsock;
int * p_int;
int err;
hsock = socket(AF_INET, SOCK_STREAM, 0);
if(hsock == -1){
printf("Error initializing socket %d\n",errno);
goto FINISH;
}
p_int = (int*)malloc(sizeof(int));
*p_int = 1;
if( (setsockopt(hsock, SOL_SOCKET, SO_REUSEADDR, (char*)p_int, sizeof(int)) == -1 )||
(setsockopt(hsock, SOL_SOCKET, SO_KEEPALIVE, (char*)p_int, sizeof(int)) == -1 ) ){
printf("Error setting options %d\n",errno);
free(p_int);
goto FINISH;
}
free(p_int);
my_addr.sin_family = AF_INET ;
my_addr.sin_port = htons(host_port);
memset(&(my_addr.sin_zero), 0, 8);
my_addr.sin_addr.s_addr = inet_addr(host_name);
if( connect( hsock, (struct sockaddr*)&my_addr, sizeof(my_addr)) == -1 ){
if((err = errno) != EINPROGRESS){
fprintf(stderr, "Error connecting socket %d\n", errno);
goto FINISH;
}
}
//Now lets do the client related stuff
buffer_len = 1024;
memset(buffer, '\0', buffer_len);
//printf("Enter some text to send to the server (press enter)\n");
//fgets(buffer, 1024, stdin);
Filename[strlen(Filename)-1]='\0';
if( (bytecount=send(hsock, Filename, strlen(Filename),0))== -1){
fprintf(stderr, "Error sending data %d\n", errno);
goto FINISH;
}
//printf("Sent bytes %d\n", bytecount);
if((bytecount = recv(hsock, Filename, buffer_len, 0))== -1){
fprintf(stderr, "Error receiving data %d\n", errno);
goto FINISH;
}
//printf("Recieved bytes %d\nReceived string \"%s\"\n", bytecount, Filename);
cout<<komenda<<endl;
close(hsock);
FINISH:
;
}
Ostatnio zmieniony 25 sie 2013, 20:13 przez NetTomassPL, łącznie zmieniany 1 raz.
- ethanak
- Wygnańcy
- Posty: 3054
- Rejestracja: 04 gru 2007, 13:19
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.04
- Środowisko graficzne: GNOME
- Architektura: x86
- Lokalizacja: Bielsko-Biała
- Kontakt:
Re: Błąd - Error accepting 24
ech... leniwy jestem.
możesz tak po drodze wyjaśnić dlaczego uparłeś się na wypisywanie numeru błędu zamiast opisu?
man perror (albo strerror albo coś podobnego), zastosuj, odpal i wrzuć komunikat.
możesz tak po drodze wyjaśnić dlaczego uparłeś się na wypisywanie numeru błędu zamiast opisu?
man perror (albo strerror albo coś podobnego), zastosuj, odpal i wrzuć komunikat.
-
- Sędziwy Jeż
- Posty: 30
- Rejestracja: 08 cze 2013, 09:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Architektura: x86
Re: Błąd - Error accepting 24
?
W terminu pisze tylko Error accepting 24
W terminu pisze tylko Error accepting 24
- ethanak
- Wygnańcy
- Posty: 3054
- Rejestracja: 04 gru 2007, 13:19
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.04
- Środowisko graficzne: GNOME
- Architektura: x86
- Lokalizacja: Bielsko-Biała
- Kontakt:
Re: Błąd - Error accepting 24
Coś Ci napisałem.
To jest dział "programowanie" a nie "zróbcie za mnie bo ja nie wim i nie ómi a mie siem nie kce".
Wróć do poprzedniego posta, poczytaj, zrób, podaj wynik.
Jeśli nie - sorry, ale chyba pomyliłeś fora.
To jest dział "programowanie" a nie "zróbcie za mnie bo ja nie wim i nie ómi a mie siem nie kce".
Wróć do poprzedniego posta, poczytaj, zrób, podaj wynik.
Jeśli nie - sorry, ale chyba pomyliłeś fora.
-
- Sędziwy Jeż
- Posty: 30
- Rejestracja: 08 cze 2013, 09:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Architektura: x86
Re: Błąd - Error accepting 24
Wstawiłem:
Otrzymałem:
Kod: Zaznacz cały
printf ("Label: %s\n",strerror(errno));
Kod: Zaznacz cały
Label: Too many open files
- ethanak
- Wygnańcy
- Posty: 3054
- Rejestracja: 04 gru 2007, 13:19
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.04
- Środowisko graficzne: GNOME
- Architektura: x86
- Lokalizacja: Bielsko-Biała
- Kontakt:
Re: Błąd - Error accepting 24
To teraz znajdź w swoim kodzie miejsce, gdzie zamykasz socket uzyskany z accept...
O, nie ma?
No to już wszystko jasne.
O, nie ma?
No to już wszystko jasne.
-
- Sędziwy Jeż
- Posty: 30
- Rejestracja: 08 cze 2013, 09:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Architektura: x86
Re: Błąd - Error accepting 24
Więc czy mógłby mi ktoś napisać w jaki sposób mam tego dokonać?
- ethanak
- Wygnańcy
- Posty: 3054
- Rejestracja: 04 gru 2007, 13:19
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.04
- Środowisko graficzne: GNOME
- Architektura: x86
- Lokalizacja: Bielsko-Biała
- Kontakt:
Re: Błąd - Error accepting 24
w skrócie:
już wiesz?
jak nie to poszukaj sobie wywołania free i przyjrzyj się dokładnie linijce której tam nie ma.
Kod: Zaznacz cały
int s=accept(cośtam);
// tu robisz coś z s
close(s);
jak nie to poszukaj sobie wywołania free i przyjrzyj się dokładnie linijce której tam nie ma.
-
- Sędziwy Jeż
- Posty: 30
- Rejestracja: 08 cze 2013, 09:39
- Płeć: Mężczyzna
- Wersja Ubuntu: 14.04
- Architektura: x86
Re: Błąd - Error accepting 24
Kolega mi powiedział że na końcu server.cpp zrobić:
I działa, problem rozwiązany.
Kod: Zaznacz cały
shutdown( *csock , 2 );
close( *csock );
free( csock );
- ethanak
- Wygnańcy
- Posty: 3054
- Rejestracja: 04 gru 2007, 13:19
- Płeć: Mężczyzna
- Wersja Ubuntu: 12.04
- Środowisko graficzne: GNOME
- Architektura: x86
- Lokalizacja: Bielsko-Biała
- Kontakt:
Re: Błąd - Error accepting 24
a sam na to nie wpadłeś?
mam tylko nadzieję że jako programista zatrudnisz się u konkurencji.
mam tylko nadzieję że jako programista zatrudnisz się u konkurencji.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości