--- curl-7.15.4-20060410/lib/getinfo.c 2006-03-21 22:00:21.000000000 -0500 +++ ftpc/opensource/curl/lib/getinfo.c 2006-04-20 20:23:42.730591000 -0400 @@ -76,6 +76,7 @@ char **param_charp=NULL; struct curl_slist **param_slistp=NULL; va_start(arg, info); + char buf; switch(info&CURLINFO_TYPEMASK) { default: @@ -198,9 +199,26 @@ case CURLINFO_LASTSOCKET: if((data->state.lastconnect != -1) && (data->state.connects[data->state.lastconnect] != NULL)) + { *param_longp = data->state.connects[data->state.lastconnect]-> sock[FIRSTSOCKET]; - else + /* we have a socket connected, let's determine if the server shut down */ + /* determine if ssl */ + if(data->state.connects[data->state.lastconnect]->protocol + & (PROT_FTPS|PROT_SSL)) { + /* use the SSL context */ + if ((data->state.connects[data->state.lastconnect]-> + ssl[FIRSTSOCKET].use) + && (SSL_peek(data->state.connects[data->state.lastconnect]-> + ssl[FIRSTSOCKET].handle, (void*)&buf, 1) == 0)) + *param_longp = -1; /* FIN received */ + } else { + /* use the socket */ + if(recv((int)data->state.connects[data->state.lastconnect]-> + sock[FIRSTSOCKET], (void*)&buf, 1, MSG_PEEK) == 0) + *param_longp = -1; /* FIN received */ + } + } else *param_longp = -1; break; default: