@@ -151,26 +151,29 @@ ConnectionFileDescriptor::Connect(llvm::StringRef path,
151
151
auto method =
152
152
llvm::StringSwitch<ConnectionStatus (ConnectionFileDescriptor::*)(
153
153
llvm::StringRef, socket_id_callback_type, Status *)>(scheme)
154
- .Case (" listen" , &ConnectionFileDescriptor::SocketListenAndAccept )
154
+ .Case (" listen" , &ConnectionFileDescriptor::AcceptTCP )
155
155
.Cases (" accept" , " unix-accept" ,
156
- &ConnectionFileDescriptor::NamedSocketAccept )
156
+ &ConnectionFileDescriptor::AcceptNamedSocket )
157
157
.Case (" unix-abstract-accept" ,
158
- &ConnectionFileDescriptor::UnixAbstractSocketAccept )
158
+ &ConnectionFileDescriptor::AcceptAbstractSocket )
159
159
.Cases (" connect" , " tcp-connect" ,
160
160
&ConnectionFileDescriptor::ConnectTCP)
161
161
.Case (" udp" , &ConnectionFileDescriptor::ConnectUDP)
162
- .Case (" unix-connect" , &ConnectionFileDescriptor::NamedSocketConnect )
162
+ .Case (" unix-connect" , &ConnectionFileDescriptor::ConnectNamedSocket )
163
163
.Case (" unix-abstract-connect" ,
164
- &ConnectionFileDescriptor::UnixAbstractSocketConnect )
164
+ &ConnectionFileDescriptor::ConnectAbstractSocket )
165
165
#if LLDB_ENABLE_POSIX
166
166
.Case (" fd" , &ConnectionFileDescriptor::ConnectFD)
167
167
.Case (" file" , &ConnectionFileDescriptor::ConnectFile)
168
168
.Case (" serial" , &ConnectionFileDescriptor::ConnectSerialPort)
169
169
#endif
170
170
.Default (nullptr );
171
171
172
- if (method)
172
+ if (method) {
173
+ if (error_ptr)
174
+ *error_ptr = Status ();
173
175
return (this ->*method)(path, socket_id_callback, error_ptr);
176
+ }
174
177
}
175
178
176
179
if (error_ptr)
@@ -532,24 +535,25 @@ ConnectionFileDescriptor::BytesAvailable(const Timeout<std::micro> &timeout,
532
535
return eConnectionStatusLostConnection;
533
536
}
534
537
535
- ConnectionStatus ConnectionFileDescriptor::NamedSocketAccept (
536
- llvm::StringRef socket_name, socket_id_callback_type socket_id_callback,
538
+ lldb::ConnectionStatus ConnectionFileDescriptor::AcceptSocket (
539
+ Socket::SocketProtocol socket_protocol, llvm::StringRef socket_name,
540
+ llvm::function_ref<void (Socket &)> post_listen_callback,
537
541
Status *error_ptr) {
538
542
Status error;
539
- std::unique_ptr<Socket> listen_socket = Socket::Create (
540
- Socket::ProtocolUnixDomain , m_child_processes_inherit, error);
541
- Socket *socket = nullptr ;
543
+ std::unique_ptr<Socket> listening_socket =
544
+ Socket::Create (socket_protocol , m_child_processes_inherit, error);
545
+ Socket *accepted_socket ;
542
546
543
547
if (!error.Fail ())
544
- error = listen_socket ->Listen (socket_name, 5 );
548
+ error = listening_socket ->Listen (socket_name, 5 );
545
549
546
550
if (!error.Fail ()) {
547
- socket_id_callback (socket_name );
548
- error = listen_socket ->Accept (socket );
551
+ post_listen_callback (*listening_socket );
552
+ error = listening_socket ->Accept (accepted_socket );
549
553
}
550
554
551
555
if (!error.Fail ()) {
552
- m_io_sp.reset (socket );
556
+ m_io_sp.reset (accepted_socket );
553
557
m_uri.assign (socket_name.str ());
554
558
return eConnectionStatusSuccess;
555
559
}
@@ -559,40 +563,19 @@ ConnectionStatus ConnectionFileDescriptor::NamedSocketAccept(
559
563
return eConnectionStatusError;
560
564
}
561
565
562
- ConnectionStatus ConnectionFileDescriptor::NamedSocketConnect (
563
- llvm::StringRef socket_name, socket_id_callback_type socket_id_callback,
564
- Status *error_ptr) {
565
- Socket *socket = nullptr ;
566
- Status error =
567
- Socket::UnixDomainConnect (socket_name, m_child_processes_inherit, socket);
568
- if (error_ptr)
569
- *error_ptr = error;
570
- m_io_sp.reset (socket);
571
- if (error.Fail ())
572
- return eConnectionStatusError;
573
- m_uri.assign (std::string (socket_name));
574
- return eConnectionStatusSuccess;
575
- }
576
-
577
- ConnectionStatus ConnectionFileDescriptor::UnixAbstractSocketAccept (
578
- llvm::StringRef socket_name, socket_id_callback_type socket_id_callback,
579
- Status *error_ptr) {
566
+ lldb::ConnectionStatus
567
+ ConnectionFileDescriptor::ConnectSocket (Socket::SocketProtocol socket_protocol,
568
+ llvm::StringRef socket_name,
569
+ Status *error_ptr) {
580
570
Status error;
581
- std::unique_ptr<Socket> listen_socket = Socket::Create (
582
- Socket::ProtocolUnixAbstract, m_child_processes_inherit, error);
583
- Socket *socket = nullptr ;
571
+ std::unique_ptr<Socket> socket =
572
+ Socket::Create (socket_protocol, m_child_processes_inherit, error);
584
573
585
574
if (!error.Fail ())
586
- error = listen_socket->Listen (socket_name, 5 );
587
-
588
- if (!error.Fail ())
589
- socket_id_callback (socket_name);
590
-
591
- if (!error.Fail ())
592
- error = listen_socket->Accept (socket);
575
+ error = socket->Connect (socket_name);
593
576
594
577
if (!error.Fail ()) {
595
- m_io_sp. reset (socket);
578
+ m_io_sp = std::move (socket);
596
579
m_uri.assign (socket_name.str ());
597
580
return eConnectionStatusSuccess;
598
581
}
@@ -602,72 +585,63 @@ ConnectionStatus ConnectionFileDescriptor::UnixAbstractSocketAccept(
602
585
return eConnectionStatusError;
603
586
}
604
587
605
- lldb:: ConnectionStatus ConnectionFileDescriptor::UnixAbstractSocketConnect (
588
+ ConnectionStatus ConnectionFileDescriptor::AcceptNamedSocket (
606
589
llvm::StringRef socket_name, socket_id_callback_type socket_id_callback,
607
590
Status *error_ptr) {
608
- Socket *socket = nullptr ;
609
- Status error = Socket::UnixAbstractConnect (socket_name,
610
- m_child_processes_inherit, socket);
611
- if (error_ptr)
612
- *error_ptr = error;
613
- m_io_sp.reset (socket);
614
- if (error.Fail ())
615
- return eConnectionStatusError;
616
- m_uri.assign (std::string (socket_name));
617
- return eConnectionStatusSuccess;
591
+ return AcceptSocket (
592
+ Socket::ProtocolUnixDomain, socket_name,
593
+ [socket_id_callback, socket_name](Socket &listening_socket) {
594
+ socket_id_callback (socket_name);
595
+ },
596
+ error_ptr);
618
597
}
619
598
620
- ConnectionStatus ConnectionFileDescriptor::SocketListenAndAccept (
621
- llvm::StringRef s , socket_id_callback_type socket_id_callback,
599
+ ConnectionStatus ConnectionFileDescriptor::ConnectNamedSocket (
600
+ llvm::StringRef socket_name , socket_id_callback_type socket_id_callback,
622
601
Status *error_ptr) {
623
- if (error_ptr)
624
- *error_ptr = Status ();
625
-
626
- llvm::Expected<std::unique_ptr<TCPSocket>> listening_socket =
627
- Socket::TcpListen (s, m_child_processes_inherit);
628
- if (!listening_socket) {
629
- if (error_ptr)
630
- *error_ptr = listening_socket.takeError ();
631
- else
632
- LLDB_LOG_ERROR (GetLogIfAnyCategoriesSet (LIBLLDB_LOG_CONNECTION),
633
- listening_socket.takeError (), " tcp listen failed: {0}" );
634
- return eConnectionStatusError;
635
- }
602
+ return ConnectSocket (Socket::ProtocolUnixDomain, socket_name, error_ptr);
603
+ }
636
604
637
- uint16_t port = listening_socket.get ()->GetLocalPortNumber ();
638
- socket_id_callback (std::to_string (port));
605
+ ConnectionStatus ConnectionFileDescriptor::AcceptAbstractSocket (
606
+ llvm::StringRef socket_name, socket_id_callback_type socket_id_callback,
607
+ Status *error_ptr) {
608
+ return AcceptSocket (
609
+ Socket::ProtocolUnixAbstract, socket_name,
610
+ [socket_id_callback, socket_name](Socket &listening_socket) {
611
+ socket_id_callback (socket_name);
612
+ },
613
+ error_ptr);
614
+ }
639
615
640
- Socket *accepted_socket;
641
- Status error = listening_socket.get ()->Accept (accepted_socket);
642
- if (error_ptr)
643
- *error_ptr = error;
644
- if (error.Fail ())
645
- return eConnectionStatusError;
616
+ lldb::ConnectionStatus ConnectionFileDescriptor::ConnectAbstractSocket (
617
+ llvm::StringRef socket_name, socket_id_callback_type socket_id_callback,
618
+ Status *error_ptr) {
619
+ return ConnectSocket (Socket::ProtocolUnixAbstract, socket_name, error_ptr);
620
+ }
646
621
647
- InitializeSocket (accepted_socket);
648
- return eConnectionStatusSuccess;
622
+ ConnectionStatus
623
+ ConnectionFileDescriptor::AcceptTCP (llvm::StringRef socket_name,
624
+ socket_id_callback_type socket_id_callback,
625
+ Status *error_ptr) {
626
+ ConnectionStatus ret = AcceptSocket (
627
+ Socket::ProtocolTcp, socket_name,
628
+ [socket_id_callback](Socket &listening_socket) {
629
+ uint16_t port =
630
+ static_cast <TCPSocket &>(listening_socket).GetLocalPortNumber ();
631
+ socket_id_callback (std::to_string (port));
632
+ },
633
+ error_ptr);
634
+ if (ret == eConnectionStatusSuccess)
635
+ m_uri.assign (
636
+ static_cast <TCPSocket *>(m_io_sp.get ())->GetRemoteConnectionURI ());
637
+ return ret;
649
638
}
650
639
651
640
ConnectionStatus
652
- ConnectionFileDescriptor::ConnectTCP (llvm::StringRef s ,
641
+ ConnectionFileDescriptor::ConnectTCP (llvm::StringRef socket_name ,
653
642
socket_id_callback_type socket_id_callback,
654
643
Status *error_ptr) {
655
- if (error_ptr)
656
- *error_ptr = Status ();
657
-
658
- llvm::Expected<std::unique_ptr<Socket>> socket =
659
- Socket::TcpConnect (s, m_child_processes_inherit);
660
- if (!socket) {
661
- if (error_ptr)
662
- *error_ptr = socket.takeError ();
663
- else
664
- LLDB_LOG_ERROR (GetLogIfAnyCategoriesSet (LIBLLDB_LOG_CONNECTION),
665
- socket.takeError (), " tcp connect failed: {0}" );
666
- return eConnectionStatusError;
667
- }
668
- m_io_sp = std::move (*socket);
669
- m_uri.assign (std::string (s));
670
- return eConnectionStatusSuccess;
644
+ return ConnectSocket (Socket::ProtocolTcp, socket_name, error_ptr);
671
645
}
672
646
673
647
ConnectionStatus
0 commit comments