hi,all When using multiple threads, in libssh2_session_handshake abnormal. If you do not multi-threaded, no problem. How to use multi-thread calls libssh2?
source code: #include "libssh2_config.h" #include <libssh2.h> #include <libssh2_sftp.h> #include <sys/socket.h> #include <netinet/in.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/types.h> #include <fcntl.h> #include <errno.h> #include <stdio.h> #include <ctype.h> #include <pthread.h> #ifndef __PRI64_PREFIX #ifdef WIN32 #define __PRI64_PREFIX "I64" #else #if __WORDSIZE == 64 #define __PRI64_PREFIX "l" #else #define __PRI64_PREFIX "ll" #endif #endif #endif #ifndef PRIu64 #define PRIu64 __PRI64_PREFIX "u" #endif void* work_thread(void* arg) { unsigned long hostaddr; int sock, i, auth_pw = 1; struct sockaddr_in sin; const char *fingerprint; LIBSSH2_SESSION *session; const char *username="ctst"; const char *password="ctst"; const char *sftppath="/home/ctst/xzm"; int rc; LIBSSH2_SFTP *sftp_session; #ifdef WIN32 WSADATA wsadata; WSAStartup(MAKEWORD(2,0), &wsadata); #endif hostaddr = inet_addr("172.168.1.224"); rc = libssh2_init (0); printf("libssh2_init..........\n") ; if (rc != 0) { fprintf (stderr, "libssh2 initialization failed (%d)\n", rc); } /* * The application code is responsible for creating the socket * and establishing the connection */ sock = socket(AF_INET, SOCK_STREAM, 0); sin.sin_family = AF_INET; sin.sin_port = htons(22); sin.sin_addr.s_addr = hostaddr; if (connect(sock, (struct sockaddr*)(&sin), sizeof(struct sockaddr_in)) != 0) { fprintf(stderr, "failed to connect!\n"); } /* Create a session instance */ session = libssh2_session_init(); if(!session) printf("libssh2_session_init..........\n") ; /* ... start it up. This will trade welcome banners, exchange keys, * and setup crypto, compression, and MAC layers */ printf("sock=%d\n", sock) ; rc = libssh2_session_handshake(session, sock); printf("libssh2_session_handshake..........\n") ; if(rc) { fprintf(stderr, "Failure establishing SSH session: %d\n", rc); return NULL ; } printf("libssh2_session_handshake....success......\n") ; libssh2_session_disconnect(session, "Normal Shutdown, Thank you for playing"); libssh2_session_free(session); #ifdef WIN32 closesocket(sock); #else close(sock); #endif fprintf(stderr, "all done\n"); libssh2_exit(); return NULL ; } int main(int argc, char** argv) { int nthread = 1; pthread_t tid; printf("in main..........\n") ; for(int i=0;i<nthread;i++) { pthread_create(&tid,NULL,work_thread,NULL); } for(int i=0; i<nthread;i++) { pthread_join(tid, NULL) ; } //work_thread(NULL) ;//normal return 0 ; } 2014-02-12 11:08:38 邢志明 BILLING产品中心 北京天源迪科信息技术有限公司 手机:18600578727 邮箱: xin...@tydic.com 网址: http://www.tydic.com 地址: 北京市海淀区北四环西路56号辉煌时代大厦9F 邮编:100080
_______________________________________________ libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel