| | 4834 | | mksocs() |
| | 4835 | | { |
| | 4836 | | struct hostd *hp = hosts->ht_hosts[hosts->ht_local]; |
| | 4837 | | struct hostd *hp0 = hosts->ht_hosts[0]; |
| | 4838 | | struct sockaddr_in sin; |
| | 4839 | | char buf[128]; |
| | 4840 | | char *sfn; |
| | 4841 | | #ifndef WIN32 |
| | 4842 | | int d; |
| | 4843 | | #else |
| | 4844 | | HANDLE d; |
| | 4845 | | int e=0; |
| | 4846 | | #endif |
| | 4847 | | #ifndef NOSOCKOPT |
| | | | ... |
| | 4865 | | #endif |
| | 4866 | | #ifdef IMA_BEOLIN |
| | 4867 | | struct hostent *hostaddr; |
| | 4868 | | #endif |
| | 4869 | | short tmpp; |
| | 4870 | | |
| | 4871 | | |
| | 4872 | | |
| | 4873 | | |
| | 4874 | | |
| | 4875 | | if ((netsock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
|
| | 4876 | | pvmlogperror("mksocs() socket netsock"); |
| | 4877 | | return 1; |
| | 4878 | | } |
| | 4879 | | |
| | 4880 | | p = getenv("PVMNETSOCKPORT"); |
| | 4881 | | |
| | 4882 | | tmpp = (p) ? atoi(p) : 0; |
| | 4883 | | |
| | 4884 | | hp->hd_sad.sin_port = htons(tmpp);
|
| | 4885 | | |
| | 4886 | | do |
| | 4887 | | { |
| | 4888 | | oslen = sizeof(hp->hd_sad); |
| | 4889 | | if ((cc=bind(netsock, (struct sockaddr*)&hp->hd_sad, oslen)) |
| | 4890 | | == -1) |
| | 4891 | | { |
| | 4892 | | if (p) { |
| | 4893 | | tmpp++; |
| | 4894 | | hp->hd_sad.sin_port = htons(tmpp);
|
| | 4895 | | } else { |
| | 4896 | | pvmlogperror("mksocs() bind netsock"); |
| | 4897 | | return 1; |
| | 4898 | | } |
| | 4899 | | } |
| | 4900 | | } |
| | 4901 | | while ( cc == -1 && p && hp->hd_sad.sin_port < 65535 ); |
| | 4902 | | |
| | 4903 | | if ( cc == -1 ) { |
| | 4904 | | pvmlogperror("mksocs() bind netsock"); |
| | 4905 | | return 1; |
| | 4906 | | } |
| | 4907 | | |
| | 4908 | | oslen = sizeof(hp->hd_sad); |
| | 4909 | | if (getsockname(netsock, (struct sockaddr*)&hp->hd_sad, &oslen) == -1) { |
| | 4910 | | pvmlogperror("mksocs() getsockname netsock"); |
| | 4911 | | return 1; |
| | 4912 | | } |
| | 4913 | | |
| | 4914 | | |
| | 4915 | | |
| | 4916 | | |
| | 4917 | | |
| | 4918 | | if ((ppnetsock = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
|
| | 4919 | | pvmlogperror("mksocs() socket ppnetsock"); |
| | 4920 | | return 1; |
| | 4921 | | } |
| | 4922 | | |
| | 4923 | | hp0->hd_sad.sin_port = 0; |
| | 4924 | | oslen = sizeof(hp0->hd_sad); |
| | 4925 | | if (bind(ppnetsock, (struct sockaddr*)&hp0->hd_sad, oslen) == -1) { |
| | 4926 | | pvmlogperror("mksocs() bind ppnetsock"); |
| | 4927 | | return 1; |
| | 4928 | | } |
| | 4929 | | oslen = sizeof(hp0->hd_sad); |
| | 4930 | | if (getsockname(ppnetsock, (struct sockaddr*)&hp0->hd_sad, &oslen) == -1) { |
| | 4931 | | pvmlogperror("mksocs() getsockname ppnetsock"); |
| | 4932 | | return 1; |
| | 4933 | | } |
| | 4934 | | |
| | 4935 | | |
| | 4936 | | |
| | 4937 | | |
| | 4938 | | |
| | 4939 | | #ifdef NOUNIXDOM |
| | 4940 | | if ((loclsock = socket(AF_INET, SOCK_STREAM, 0)) == -1) { |
| | | | ... |
| | 5022 | | || setsockopt(ppnetsock, SOL_SOCKET, SO_RCVBUF, |
| | 5023 | | (char*)&bsz, sizeof(bsz)) == -1) { |
| | 5024 | | pvmlogperror("mksocs() setsockopt"); |
| | 5025 | | return 1; |
| | 5026 | | } |
| | 5027 | | #endif |
| | 5028 | | |
| | 5029 | | p = inadport_hex(&sin); |
| | 5030 | | |
| | 5031 | | #else |
| | 5032 | | if ((loclsock = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) {
|
| | 5033 | | pvmlogperror("mksocs() socket loclsock"); |
| | 5034 | | return 1; |
| | 5035 | | } |
| | 5036 | | |
| | 5037 | | BZERO((char*)&uns, sizeof(uns));
|
| | 5038 | | uns.sun_family = AF_UNIX;
|
| | 5039 | | spath[0] = 0; |
| | 5040 | | (void)PVMTMPNAMFUN(spath);
|
| | 5041 | | strcpy(uns.sun_path, spath); |
| | 5042 | | |
| | 5043 | | |
| | 5044 | | |
| | 5045 | | |
| | 5046 | | oslen = sizeof(uns); |
| | 5047 | | if (bind(loclsock, (struct sockaddr*)&uns, oslen) == -1) { |
| | 5048 | | pvmlogperror("mksocs() bind loclsock"); |
| | 5049 | | return 1; |
| | 5050 | | } |
| | 5051 | | |
| | 5052 | | if (listen(loclsock, SOMAXCONN) == -1) {
|
| | 5053 | | pvmlogperror("mksocs() listen loclsock"); |
| | 5054 | | return 1; |
| | 5055 | | } |
| | 5056 | | |
| | 5057 | | loclspath = STRALLOC(spath);
|
| | 5058 | | p = spath; |
| | 5059 | | |
| | 5060 | | #endif |
| | 5061 | | |
| | 5062 | | |
| | 5063 | | |
| | 5064 | | |
| | 5065 | | |
| | 5066 | | if (!(sfn = pvmdsockfile())) { |
| | 5067 | | pvmlogerror("mksocs() pvmdsockfile() failed\n"); |
| | 5068 | | pvmbailout(0); |
| | 5069 | | } |
| | 5070 | | |
| | 5071 | | #ifndef WIN32 |
| | 5072 | | if ((d = open(sfn, O_CREAT|O_EXCL|O_WRONLY|O_TRUNC, 0600)) == -1) {
|
| | 5073 | | if (errno == EEXIST) {
|
| | 5074 | | #else |
| | 5075 | | d = win32_create_file(sfn, CREATE_NEW); |
| | 5076 | | if ((int) d == -2){ |
| | 5077 | | |
| | 5078 | | system_loser_win = TRUE; |
| | 5079 | | e = _open(sfn,O_CREAT|O_EXCL|O_WRONLY|O_TRUNC, 0600); |
| | 5080 | | } |
| | 5081 | | if (((int)d == -1) || (e ==-1)) { |
| | 5082 | | if (1) { |
| | | | ... |
| | 5091 | | (void)pvmlogprintf( |
| | 5092 | | "mksocs() %s exists. pvmd already running?\n", sfn); |
| | 5093 | | return 2; |
| | 5094 | | #endif |
| | 5095 | | |
| | 5096 | | } else { |
| | 5097 | | pvmlogperror(sfn); |
| | 5098 | | pvmlogerror("mksocs() can't write address file\n"); |
| | 5099 | | return 1; |
| | 5100 | | } |
| | 5101 | | } else { |
| | 5102 | | #ifndef WIN32 |
| | 5103 | | cc = write(d, p, strlen(p)); |
| | 5104 | | #else |
| | 5105 | | CloseHandle(d); |
| | 5106 | | if (!system_loser_win) { |
| | 5107 | | if ((d = (HANDLE) win32_open_file(sfn)) == (HANDLE) -1) { |
| | 5108 | | pvmlogprintf("could not open file %s: %d \n", |
| | 5109 | | sfn,GetLastError()); |
| | 5110 | | return 2; |
| | 5111 | | } |
| | 5112 | | cc = win32_write_file(d,p,strlen(p)); |
| | 5113 | | } else |
| | 5114 | | |
| | 5115 | | cc = write(e,p,strlen(p)); |
| | 5116 | | #endif |
| | 5117 | | if (cc != strlen(p)) { |
| | 5118 | | if (cc == -1) { |
| | 5119 | | pvmlogperror(sfn); |
| | 5120 | | pvmlogerror("mksocs() can't write address file\n"); |
| | 5121 | | |
| | 5122 | | } else { |
| | 5123 | | (void)pvmlogprintf( |
| | 5124 | | "mksocs() aargh, short write on %s: %d\n", |
| | 5125 | | sfn, cc); |
| | 5126 | | pvmlogerror("mksocs() is the partition full?\n"); |
| | 5127 | | } |
| | | | ... |
| | 5129 | | (void)close(d); |
| | 5130 | | #else |
| | 5131 | | if (d) |
| | 5132 | | CloseHandle(d); |
| | 5133 | | if (e) |
| | 5134 | | close(e); |
| | 5135 | | #endif |
| | 5136 | | (void)unlink(sfn); |
| | 5137 | | return 1; |
| | 5138 | | } |
| true | 5139 | | loclsnam = STRALLOC(sfn);
|