diff --git a/str_socket.cpp b/str_socket.cpp index 448f524..9c36f11 100644 --- a/str_socket.cpp +++ b/str_socket.cpp @@ -427,10 +427,26 @@ void Cstr_socket_srv::pon_tout( int t_out ) } //********************************************************************************************************************************** //********************************************************************************************************************************** -extern "C" UTILES_EXPORT BOOL str_socket_conecta( Cstr_socket *soc, char *ip, int puerto ) +extern "C" UTILES_EXPORT BOOL str_socket_conecta(Cstr_socket * soc, char* ip, int puerto, char* ip_local) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); - return soc->crear() && soc->conecta(ip, puerto); + BOOL b = TRUE; + int n = 1; + + + if (ip_local && ip_local[0] != 0) + { + do + { + b = soc->crear(ip_local, puerto + n); + n++; + } while (!b && n < 5); + if (!b) + int err = GetLastError(); + } + else + b = soc->crear(); + return b && soc->conecta(ip, puerto); } //********************************************************************************************************************************** extern "C" UTILES_EXPORT Cstr_socket * str_socket_crea() diff --git a/str_socket.h b/str_socket.h index 559f3fe..d541f30 100644 --- a/str_socket.h +++ b/str_socket.h @@ -79,7 +79,7 @@ public: }; //funciones de socket cliente para pinvoke----------------------------------------------------- extern "C" UTILES_EXPORT Cstr_socket *str_socket_crea(); -extern "C" UTILES_EXPORT BOOL str_socket_conecta(Cstr_socket *soc, char *ip, int puerto); +extern "C" UTILES_EXPORT BOOL str_socket_conecta(Cstr_socket *soc, char *ip, int puerto, char* ip_local=NULL); extern "C" UTILES_EXPORT BOOL str_socket_envia(Cstr_socket *soc, char *txt); extern "C" UTILES_EXPORT int str_socket_recive(Cstr_socket* soc); extern "C" UTILES_EXPORT void str_socket_dame_buf(Cstr_socket* soc, char* buf);